这道题,跟我昨天写的求二叉树的最大宽度,我觉得很相像,然后这两天写二叉树的一些问题,无非两种方法比较常用,递归和迭代,然后我按照这两种方法的通用思路,写了个大概,中间的 主要逻辑想不通了,初始尝试如下.
上图中,我经常说是迭代的方法其实是广度优先搜索算法(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;
};