「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」
Hope is a good thing, maybe the best of things. And no good thing ever dies.
前言
在前面几篇文章中,我总结了自己二叉树的前序遍历、中序遍历和后序遍历的递归方式和迭代方式的解法,今天来学习一下它的层序遍历。
什么是层序遍历
层序遍历还是比较好理解的就是按二叉树从上到下,从左到右依次打印每个节点中存储的数据。 如下图所示的数据结构:
对比四种遍历方式:
- 前序遍历:A → B → D → C
- 中序遍历:B → D → A → C
- 后续遍历:D → B → C → A
- 层序遍历:A → B → C → D
题目
给定一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
复制代码
附:leetcode-cn.com/problems/bi…
思路和分析
用一个变量记录当前所在的层
数组的下标即为当前所在的层
如果是第一次进入该层,
创建一个空数组
否则将节点值添加到该层的数组中
返回数组
总结一句话:队列的每个元素记录深度。相同深度组成一个数组返回即可
解题
var levelOrder = function (root) {
if (root == null) {
return [];
}
let result = [];
let queue = [root];
while (queue.length) {
let levelSize = queue.length;
// 当前层级的结果
let curLevelResult = [];
// 遍历当前层级的结果
for (let i = 0; i < levelSize; i++) {
const node = queue.shift();
curLevelResult.push(node.val);
if (node.left) queue.push(node.left);
if (node.right) queue.push(node.right);
}
result.push(curLevelResult);
}
return result;
};
复制代码
结语
如果这篇文章帮到了你,欢迎点赞👍和关注⭐️。
文章如有错误之处,希望在评论区指正🙏🙏
欢迎关注我的微信公众号,一起交流技术,微信搜索 🔍 :「 五十年以后 」