算法:二叉树的层序遍历

·  阅读 370

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

Hope is a good thing, maybe the best of things. And no good thing ever dies.

前言

在前面几篇文章中,我总结了自己二叉树的前序遍历、中序遍历和后序遍历的递归方式和迭代方式的解法,今天来学习一下它的层序遍历

什么是层序遍历

层序遍历还是比较好理解的就是按二叉树从上到下从左到右依次打印每个节点中存储的数据。 如下图所示的数据结构:

image.png

对比四种遍历方式:

  • 前序遍历: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;
};

复制代码

结语

如果这篇文章帮到了你,欢迎点赞👍和关注⭐️。

文章如有错误之处,希望在评论区指正🙏🙏

欢迎关注我的微信公众号,一起交流技术,微信搜索 🔍 :「 五十年以后

分类:
前端
分类:
前端
收藏成功!
已添加到「」, 点击更改