解法一:借助队列
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func levelOrder(root *TreeNode) [][]int {
res := make([][]int, 0)
if root == nil{
return res
}
queue := []*TreeNode{root} // 初始只有第一层根节点
// 从上往下逐层遍历
for len(queue) > 0{
total := len(queue) // 记录这一层的节点个数
curLevel := make([]int, 0, total)
for i := 0; i < total; i++{
cur := queue[0]
curLevel = append(curLevel, cur.Val)
// cur的左右子节点入队
if cur.Left != nil{
queue = append(queue, cur.Left)
}
if cur.Right != nil{
queue = append(queue, cur.Right)
}
// 处理完,cur出队
queue = queue[1:]
}
res = append(res, curLevel)
}
return res
}
注意队列的长度 total 一定要在内层for循环开始前保存下来,因为在循环过程中队列的长度是会变化的