107. 二叉树的层序遍历 II

给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
3
/ \
9 20
/ \
15 7
返回其自底向上的层序遍历为:

[
[15,7],
[9,20],
[3]
]

  1. //bfs常规解,level前 + 一行翻转 = 完事
  2. //2,bfs常规解
  3. func levelOrderBottom(root *TreeNode) [][]int {
  4. if root == nil {
  5. return nil
  6. }
  7. levels := [][]int{}
  8. queue := []*TreeNode{root}
  9. for len(queue) > 0 {
  10. n := len(queue)
  11. level_tmp := []int{}
  12. for i := 0; i < n; i++ {
  13. root = queue[0]
  14. queue = queue[1 :]
  15. level_tmp = append(level_tmp, root.Val)
  16. if root.Left != nil {
  17. queue = append(queue, root.Left)
  18. }
  19. if root.Right != nil {
  20. queue = append(queue, root.Right)
  21. }
  22. }
  23. levels = append(levels, level_tmp)
  24. }
  25. k := len(levels) //+ 一行翻转
  26. for i := 0; i < k/2; i++ {
  27. levels[i], levels[k-1-i] = levels[k-1-i], levels[i]
  28. }
  29. return levels
  30. }