给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

示例:
二叉树:[3,9,20,null,null,15,7],

  1. 3
  2. / \
  3. 9 20
  4. / \
  5. 15 7

返回其层序遍历结果:

  1. [
  2. [3],
  3. [9,20],
  4. [15,7]
  5. ]

解法一:BFS 迭代

  1. func levelOrder(root *TreeNode) [][]int {
  2. res := [][]int{}
  3. if root == nil {
  4. return res
  5. }
  6. queue := []*TreeNode{root}
  7. for len(queue) > 0 {
  8. size := len(queue)
  9. temp := []int{}
  10. for i := 0; i < size; i++ {
  11. var top *TreeNode
  12. top, queue = queue[0], queue[1:]
  13. temp = append(temp, top.Val)
  14. if top.Left != nil {
  15. queue = append(queue, top.Left)
  16. }
  17. if top.Right != nil {
  18. queue = append(queue, top.Right)
  19. }
  20. }
  21. res = append(res, temp)
  22. }
  23. return res
  24. }

解法二:DFS 递归

  1. func levelOrder(root *TreeNode) [][]int {
  2. res := [][]int{}
  3. var dfs func(root *TreeNode, depth int)
  4. dfs = func(root *TreeNode, depth int) {
  5. if root == nil {
  6. return
  7. }
  8. if depth == len(res) {
  9. res = append(res, []int{})
  10. }
  11. res[depth] = append(res[depth], root.Val)
  12. dfs(root.Left, depth+1)
  13. dfs(root.Right, depth+1)
  14. }
  15. dfs(root, 0)
  16. return res
  17. }