LeetCode:地址
题目要求
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
提示:
节点总数 <= 1000
思路
其实就是树的广度优先遍历。
额外地,遍历到新的一层时,push一个空数组,当前层的元素都放入这个数组中,就可以按层打印了。
代码
const levelOrder = root => {
if (!root) return [];
const res = [];
// 根节点入队
const q = [root];
// 当队列还有值时,一直执行
while (q.length) {
let len = q.length;
res.push([]);
while (len--) {
// 获取根节点,根节点出队
const n = q.shift();
// 根节点加入res栈顶元素
res[res.length - 1].push(n.val);
// 队头左右节点入队
n.left && q.push(n.left);
n.right && q.push(n.right);
}
}
return res;
};