剑指 Offer 32 - II. 从上到下打印二叉树 II
题目描述:
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
示例:
给定二叉树: [3,9,20,null,null,15,7],
返回结果为:
思路:
从题目中可以看到,本题考察的是二叉树的层序遍历,并且在结果中要体现出“层次”。
稍微改变一下对队列的使用,就可以在遍历过程中体现出层次,大致过程如下:
- 初始化 queue,用于存储当前层的节点
- 检查 queue 是否为空
2.1:如果不为空:依次遍历当前 queue 内的所有节点,检查每个节点的左右子节点,将不为空的子节点放入 queue,继续循环
2.2:如果为空:跳出循环
代码:
var levelOrder = function(root) {
if (!root) return [];
// 1. 设置结果集
const result = [];
// 2. 设置当前层
let nowRoot = [root];
// 3. 广度优先搜索(BFS)
while (nowRoot.length) {
// 3.1 设置下一层
const nextRoot = [];
// 3.2 设置当前层的值
const nowResult = [];
// 3.3 遍历当前层,取值以及添加下一层
for (let i = 0; i < nowRoot.length; i++) {
// 3.3.1 添加值
nowResult.push(nowRoot[i].val);
// 3.3.2 如果存在左子树
if (nowRoot[i].left) {
nextRoot.push(nowRoot[i].left);
}
// 3.3.3 如果存在右子树
if (nowRoot[i].right) {
nextRoot.push(nowRoot[i].right);
}
}
// 3.4 收集完毕,开始交接
nowRoot = nextRoot;
result.push(nowResult);
}
// 4. 返回结果
return result;
}