以上代码和内容都是参考掘金小册子:的前端算法和数据结面试:底层逻辑解读与大厂真题训练 题目描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点
示例: 二叉树:[3,9,20,null,null,15,7],
const root = {
val: "A",
left: {
val: "B",
left: {
val: "D"
},
right: {
val: "E"
}
},
right: {
val: "C",
right: {
val: "F"
}
}
};
const levelOrder = (root) => {
const queue = [], res = [];
if (!root) return;
queue.push(root); // 根节点入队
while (queue.length) {
const level = []; // 每一层的节点
// 缓存刚进入循环时的队列长度,这一步很关键,因为队列长度后面会发生改变
const len = queue.length; // 当前层的节点个数
// 循环遍历当前层级的结点,这样就可以拿到每一个层级的数据,然后将当前的子节点进入到栈中,不得不说这个for循环很棒
for (let i = 0; i < len; i++) {
const cur = queue.shift(); // 弹出每一层节点数据
level.push(cur.val);
if (cur.left) {
queue.push(cur.left); // 每一层的左节点入栈
}
if (cur.right) {
queue.push(cur.right); // 每一层的右节点入栈
}
}
// 把每一层的结果数组存放到总的结果数组中
res.push(level)
}
return res;
}
const result = levelOrder(root)
console.log(result, '结果数组返回')