剑指 Offer 32 - III. 从上到下打印二叉树 III

和力扣 103. 二叉树的锯齿形层序遍历一致

  1. //2,bfs常规解
  2. func levelOrder(root *TreeNode) [][]int {
  3. if root == nil {
  4. return nil
  5. }
  6. levels := [][]int{}
  7. queue := []*TreeNode{root}
  8. for len(queue) > 0 {
  9. n := len(queue)
  10. level_tmp := []int{}
  11. for i := 0; i < n; i++ {
  12. root = queue[0]
  13. queue = queue[1 :]
  14. level_tmp = append(level_tmp, root.Val)
  15. if root.Left != nil {
  16. queue = append(queue, root.Left)
  17. }
  18. if root.Right != nil {
  19. queue = append(queue, root.Right)
  20. }
  21. }
  22. k := len(level_tmp)
  23. if len(levels) % 2 == 1 { //说明levels是层数【】外数组,level是内数组【】
  24. for i := 0; i < k / 2; i++ {
  25. level_tmp[i], level_tmp[k - 1 - i] = level_tmp[k - 1 - i], level_tmp[i]
  26. }
  27. }
  28. levels = append(levels, level_tmp)
  29. }
  30. return levels
  31. }