LeetCode 102.二叉树的层次遍历 - JavaScript

·  阅读 1129

这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战


说明:文章部分内容及图片出自网络,如有侵权请与我本人联系(主页有公众号:小攻城狮学前端)

作者:小只前端攻城狮、 主页:小只前端攻城狮的主页、 来源:掘金

GitHub:P-J27、 CSDN:PJ想做前端攻城狮

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


LeetCode 102.二叉树的层次遍历 - JavaScript

题目描述

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

例如给定二叉树:

    3
   / \
  9  20
    /  \
   15   7
复制代码

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]
复制代码
题目分析

从题目中可以看到,本题考察的是二叉树的层序遍历,并且在结果中要体现出“层次”


思路

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

  • 初始化 queue,用于存储当前层的节点
  • 检查 queue 是否为空
    • 如果不为空:依次遍历当前 queue 内的所有节点,检查每个节点的左右子节点,将不为空的子节点放入 queue,继续循环
    • 如果为空:跳出循环

在上面的思路上,稍微改造下就可以了。代码如下:

var levelOrder = function(root) {
  if (!root) return [];
  const queue = [root];
  const res = []; // 存放遍历结果
  let level = 0; // 代表当前层数
  while (queue.length) {
    res[level] = []; // 第level层的遍历结果

    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;
};
复制代码

感谢阅读,希望能对你有所帮助,文章若有错误或者侵权,可以在评论区留言或在我的主页添加公众号联系我。

写作不易,如果觉得不错,可以「点赞」+「评论」 谢谢支持❤

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