324 字
2 分钟
算法之二叉树层序遍历

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

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

image-20210619141848957

思路:

稍微改变一下对队列的使用,就可以在遍历过程中体现出层次,大致过程如下:

  • 初始化 queue,用于存储当前层的节点
  • 检查 queue 是否为空
    • 如果不为空:依次遍历当前 queue 内的所有节点,检查每个节点的左右子节点,将不为空的子节点放入 queue,继续循环
    • 如果为空:跳出循环
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function(root) {
if (!root) return [];
const queue = [root];
const res = []; // 存放遍历结果
let level = 0; // 代表当前层数
while (queue.length) {
res[level] = []; // 第level层的遍历结果
// 这里一开始我以为每层节点数量都是满的。。。然后就每层乘以2了。。。
let levelNum = queue.length; // 第level层的节点数量
while (levelNum--) {
const front = queue.shift();
res[level].push(front.val);
if (front.left) queue.push(front.left);
if (front.right) queue.push(front.right);
}
level++;
}
return res;
};

思路2:递归

var levelOrder = function (root) {
let res = [];
const traversal = (root, level = 0) => {
if (root) {
if (!res[level]) res[level] = [];
res[level].push(root.val);
traversal(root.left, level + 1)
traversal(root.right, level + 1)
}
}
traversal(root);
return res;
};
算法之二叉树层序遍历
https://nollieleo.github.io/posts/算法之二叉树层序遍历/
作者
翁先森
发布于
2021-06-19
许可协议
CC BY-NC-SA 4.0