102. 二叉树的层序遍历

42 阅读1分钟

给你二叉树的根节点 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

错误写法

function levelOrder(root: TreeNode | null): number[][] {
  if (!root) return []
    let tempArr: number[] = []
    const resArr: number[][] = []
    const helperQueue: TreeNode[] = []
    let curNode: TreeNode
    helperQueue.push(root)
    while(helperQueue.length) {
        for(let i = 0; i < helperQueue.length; i++) {
           curNode = helperQueue.shift()!;
            tempArr.push(curNode.val);
            if (curNode.left) helperQueue.push(curNode.left)
            if (curNode.right) helperQueue.push(curNode.right)
        }
        resArr.push(tempArr)
        tempArr = []
    }
    return resArr  
};

订正:

注意:不能直接用helperQueue.length控制下面的循环,因为helperQueue.length是动态变化的

function levelOrder(root: TreeNode | null): number[][] {
  if (!root) return []
    let tempArr: number[] = []
    const resArr: number[][] = []
    const helperQueue: TreeNode[] = []
    let curNode: TreeNode
    helperQueue.push(root)
    while(helperQueue.length) {
        const length = helperQueue.length//注意:不能直接用helperQueue.length控制下面的循环,因为helperQueue.length是动态变化的
        for(let i = 0; i < length; i++) {
           curNode = helperQueue.shift()!;
            tempArr.push(curNode.val);
            if (curNode.left) helperQueue.push(curNode.left)
            if (curNode.right) helperQueue.push(curNode.right)
        }
        resArr.push(tempArr)
        tempArr = []
    }
    return resArr
    
};