LeetCode102 二叉树的层序遍历

48 阅读1分钟

leetcode.cn/problems/bi…

解法一:借助队列

/**
 * 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循环开始前保存下来,因为在循环过程中队列的长度是会变化的