Golang实现
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func levelOrder(root *TreeNode) [][]int {
// return dfsLevelOrder(root)
return bfsLevelOrder(root)
}
func bfsLevelOrder(root *TreeNode) [][]int {
if root == nil {
return [][]int{}
}
queue := make([]*TreeNode, 0)
queue = append(queue, root)
levels := make([][]int, 0)
for len(queue) > 0 {
n, level := len(queue), make([]int, 0)
for i := 0; i < n; i++ {
root = queue[0]
queue = queue[1:]
level = append(level, root.Val)
if root.Left != nil {
queue = append(queue, root.Left)
}
if root.Right != nil {
queue = append(queue, root.Right)
}
}
levels = append(levels, level)
}
return levels
}
func dfsLevelOrder(root *TreeNode) [][]int {
level := 0
vals := make([][]int, 0)
dfs(root, level, &vals)
return vals
}
func dfs(root *TreeNode, level int, vals *[][]int) {
//fmt.Println(root, level, vals)
if root == nil {
return
}
if len(*vals) <= level {
*vals = append(*vals, []int{root.Val})
} else {
(*vals)[level] = append((*vals)[level], root.Val)
}
dfs(root.Left, level+1, vals)
dfs(root.Right, level+1, vals)
}
展开