102. 二叉树的层序遍历

image.png

1 队列不外乎就是出队的和入队的处理逻辑,理解了这个就迎刃而解了
2 入队就是当前层里元素的所有下一层的元素都需要入队,也就是他们的子节点入队
3 在对当前层遍历做子节点入队的时候,捎带把当前的层元素做了遍历,就这么简单的
4 出队就是把当前这层的元素都出队就可以了

  1. package main
  2. type TreeNode struct {
  3. Val int
  4. Left *TreeNode
  5. Right *TreeNode
  6. }
  7. func levelOrder(root *TreeNode) [][]int {
  8. var res [][]int
  9. if root == nil {
  10. return res
  11. }
  12. queue := make([]*TreeNode, 0)
  13. queue = append(queue, root)
  14. for len(queue) > 0 {
  15. l := len(queue)
  16. ans := make([]int, 0)
  17. for i := 0; i < len(queue); i++ {
  18. node := queue[i]
  19. ans = append(ans, node.Val)
  20. if node.Left != nil {
  21. queue = append(queue, node.Left)
  22. }
  23. if node.Right != nil {
  24. queue = append(queue, node.Right)
  25. }
  26. }
  27. res = append(res, ans)
  28. queue = queue[l:]
  29. }
  30. return res
  31. }
  32. func main() {
  33. }

image.png