剑指 Offer 32 - II. 从上到下打印二叉树 II

58 阅读1分钟

image.png

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var levelOrder = function (root) {
    let res = []
    if (!root) {
        return res
    }
    let queue = [];
    // queue 此时已经是二维数组了
    queue.push(root)

    // 没有孩子节点的时候,queue.shift()之后为空则跳出循环
    while (queue.length > 0) {

        //获取每层的长度,放在循环体里面
        let len = queue.length;

        //声明临时数组
        let tempArr = []

        /**
         * 例子:3,9,20,null,null,15,7
         * 当前queue长度是1
         * 当前的根值是3
         * 所以遍历一次
         * 判断左右树是否存在,如果存在,添加到queue数组中。
         */

        for (let i = 0; i < len; i++) {
            // shift()用于删除数组的开头元素,并返回被删除的元素
            let nodes = queue.shift()
            // 存放根节点
            tempArr.push(nodes.val);

            // 节点对象只有 left 和 right 作为属性!!!
            if (nodes.left) {
                queue.push(nodes.left)
            }
            if (nodes.right) {
                queue.push(nodes.right)
            }
        }
        res.push(tempArr);
    }
    return res
};

剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(LeetCode)