📑 题目:102. 二叉树的层序遍历

🚀 本题 LeetCode 传送门

题目大意

按层序从上到下遍历一颗树。

解题思路

用一个队列即可实现。

代码

  1. package leetcode
  2. import (
  3. ""github.com/halfrost/LeetCode-Go/structures""
  4. )
  5. // TreeNode define
  6. type TreeNode = structures.TreeNode
  7. /**
  8. * Definition for a binary tree node.
  9. * type TreeNode struct {
  10. * Val int
  11. * Left *TreeNode
  12. * Right *TreeNode
  13. * }
  14. */
  15. // 解法一 BFS
  16. func levelOrder(root *TreeNode) [][]int {
  17. if root == nil {
  18. return [][]int{}
  19. }
  20. queue := []*TreeNode{root}
  21. res := make([][]int, 0)
  22. for len(queue) > 0 {
  23. l := len(queue)
  24. tmp := make([]int, 0, l)
  25. for i := 0; i < l; i++ {
  26. if queue[i].Left != nil {
  27. queue = append(queue, queue[i].Left)
  28. }
  29. if queue[i].Right != nil {
  30. queue = append(queue, queue[i].Right)
  31. }
  32. tmp = append(tmp, queue[i].Val)
  33. }
  34. queue = queue[l:]
  35. res = append(res, tmp)
  36. }
  37. return res
  38. }
  39. // 解法二 DFS
  40. func levelOrder1(root *TreeNode) [][]int {
  41. var res [][]int
  42. var dfsLevel func(node *TreeNode, level int)
  43. dfsLevel = func(node *TreeNode, level int) {
  44. if node == nil {
  45. return
  46. }
  47. if len(res) == level {
  48. res = append(res, []int{node.Val})
  49. } else {
  50. res[level] = append(res[level], node.Val)
  51. }
  52. dfsLevel(node.Left, level+1)
  53. dfsLevel(node.Right, level+1)
  54. }
  55. dfsLevel(root, 0)
  56. return res
  57. }