可视化树: visualgo.net/zh/bst?slid…
二叉树前中后遍历
func inorderTraversal(root *TreeNode) []int {
ans := []int{}
helper(root, &ans)
return ans
}
func helper(node *TreeNode, ans *[]int) {
if node == nil {
return
}
helper(node.Left, ans)
*ans = append(*ans, node.Val)
helper(node.Right, ans)
}
func preorderTraversal(root *TreeNode) []int {
ans := []int{}
helper(root, &ans)
return ans
}
func helper(node *TreeNode, ans *[]int) {
if node == nil {
return
}
*ans = append(*ans, node.Val)
helper(node.Left, ans)
helper(node.Right, ans)
}
func postorder(root *Node) []int {
ans := []int{}
helper(root, &ans)
return ans
}
func helper(node *Node, ans *[]int) {
if node == nil {
return
}
for _, children := range node.Children {
helper(children, ans)
}
*ans = append(*ans, node.Val)
}
func preorder(root *Node) []int {
ans := []int{}
helper(root, &ans)
return ans
}
func helper(node *Node, ans *[]int) {
if node == nil {
return
}
*ans = append(*ans, node.Val)
for _, children := range node.Children {
helper(children, ans)
}
}
func levelOrder(root *Node) [][]int {
ans := [][]int{}
helper([]*Node{root}, &ans)
return ans
}
func helper(nodes []*Node, ans *[][]int) {
if len(nodes) == 0 || nodes[0] == nil {
return
}
chils := []*Node{}
vals := []int{}
for _, node := range nodes {
vals = append(vals, node.Val)
chils = append(chils, node.Children...)
}
*ans = append(*ans, vals)
helper(chils, ans)
}