js(56)~剑指 Offer 32 - II. 从上到下打印二叉树 II

67 阅读1分钟

这道题,跟我昨天写的求二叉树的最大宽度,我觉得很相像,然后这两天写二叉树的一些问题,无非两种方法比较常用,递归和迭代,然后我按照这两种方法的通用思路,写了个大概,中间的 主要逻辑想不通了,初始尝试如下. image.png

上图中,我经常说是迭代的方法其实是广度优先搜索算法(Breadth first search)通常成为bfs;这道题对我来说的难点就是while循环里面再有一个for循环或者while循环不知道怎么写了,具体题解如下,

if(!root) return [];

    const s = [root];
    let res = [];
    while(s.length) {
        const temp = []

        // for(let i = s.length; i > 0; i --) {
            let slength  = s.length;
            while(slength--){ // 这里不能直接写成s.length-- 目前不知道为什么
            const node  = s.shift();
            temp.push(node.val)

            node.left && s.push(node.left);
            node.right && s.push(node.right);
        }

        res.push(temp)
        
    }
    return res;
};

力扣本题传送门