难度:中等 题目来源:力扣(LeetCode) https://leetcode-cn.com/problems/binary-tree-level-order-traversal

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

    示例:
    二叉树:[3,9,20,null,null,15,7],
    3
    / \
    9 20
    / \
    15 7
    返回其层次遍历结果:
    [
    [3],
    [9,20],
    [15,7]
    ]

    解法:

    1. type TreeNode struct {
    2. Left, Right *TreeNode
    3. Val int
    4. }
    5. func levelOrder(root *TreeNode) [][]int {
    6. if root == nil {
    7. return [][]int{}
    8. }
    9. ret := [][]int{}
    10. // 深度优先
    11. var dfsFunc func(root *TreeNode, level int)
    12. dfsFunc = func(root *TreeNode, level int) {
    13. if root == nil {
    14. return
    15. }
    16. if level == len(ret) {
    17. ret = append(ret, []int{root.Val})
    18. } else {
    19. ret[level] = append(ret[level], root.Val)
    20. }
    21. dfsFunc(root.Left, level+1)
    22. dfsFunc(root.Right, level+1)
    23. }
    24. dfsFunc(root, 0)
    25. // 广度优先
    26. // var bfsFunc func(root *TreeNode)
    27. // bfsFunc = func(root *TreeNode) {
    28. // if root == nil {
    29. // return
    30. // }
    31. // level, queue := 0, list.New()
    32. // queue.PushBack(interface{}(root))
    33. // for queue.Len() > 0 {
    34. // length, element := queue.Len(), []int{}
    35. // for i := 0; i < length; i++ {
    36. // node := queue.Remove(queue.Front()).(*TreeNode)
    37. // element = append(element, node.Val)
    38. // if node.Left != nil {
    39. // queue.PushBack(interface{}(node.Left))
    40. // }
    41. // if node.Right != nil {
    42. // queue.PushBack(interface{}(node.Right))
    43. // }
    44. // }
    45. // ret = append(ret, element)
    46. // level++
    47. // }
    48. // }
    49. // bfsFunc(root)
    50. return ret
    51. }