给你二叉树的根节点
root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]示例 2:
输入:root = [1] 输出:[[1]]示例 3:
输入:root = [] 输出:[]提示:
- 树中节点数目在范围
[0, 2000]
内-1000 <= Node.val <= 1000
思路:利用队列 queue 先进先出的特性,按层次逐层遍历
时间复杂度:O(N)
空间复杂度:O(N)
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func levelOrder(root *TreeNode) [][]int {
if root == nil {
return [][]int{}
}
res := make([][]int, 0)
queue := []*TreeNode{root} // 根节点先入队
for len(queue) > 0 {
subRes := make([]int, 0)
length := len(queue) // 提前缓存上一轮queue大小,避免在内循环中append导致queue长度变化
for i := 0; i < length; i++ {
root := queue[0]
subRes = append(subRes, root.Val)
queue = queue[1:] // pop
if root.Left != nil {
queue = append(queue, root.Left)
}
if root.Right != nil {
queue = append(queue, root.Right)
}
}
res = append(res, subRes)
}
return res
}