LeetCode——二叉树的层序遍历(递归与非递归)

简介: LeetCode——二叉树的层序遍历(递归与非递归)

题目描述

image.png

递归实现

递归实现主要是在函数内部定义一个新的函数,这个函数接收两个参数,一个是当前节点,一个是层次,如果当前节点为空的话,则返回空,如果当前节点不为空,判断二维数组的指定位置是否为空,如果存在则push进当前节点的val值,如果不存在则设置为空数组,然后递归遍历左子树,层次+1,递归遍历右子树的时候层次还是+1。

var levelOrder = function(root) {
  // 定义最终的返回结果
  const res = [];
  function levelOrder(root,level) {
    if (!root) return null;
    res[level] = res[level] || [];
    res[level].push(root.val);
    levelOrder(root.left,level + 1);
    levelOrder(root.right,level + 1);
  };
  levelOrder(root,0);
  return res;
};
复制代码

非递归实现

非递归实现主要是借助队列来实现,首先获取队列中对应二叉树的一层的元素,然后取出队头元素插入指定二维数组中,如果左子树存在的话,让左子树入队列,如果右子树存在,则让右子树入队列,循环完一层队列的层次+1。

var levelOrder = function(root) {
  if (!root) return []
  // 定义最终的返回结果
  const res = [];
  // 定义队列
  const queue = [root];
  // 定义层次
  let level = 0;
  // 只要队列中有元素,便进入循环
  while (queue.length) {
    res.push([]);
    let len = queue.length;
    for (let i = 0; i < len; i++) {
      // 取出对头元素
      let node = queue.shift();
      res[level].push(node.val);
      // 左子树存在的话,让左子树入队列
      node.left && queue.push(node.left);
      // 右子树存在的话,让右子树入队列
      node.right && queue.push(node.right);
    }
    level++;
  }
  return res;
};
复制代码

题目反思

二叉树的层序遍历是一种非常重要的遍历方式,是我们必须掌握的,本题中值得我们学习的思路有以下几点。

  1. 使用递归的层序遍历和使用迭代的层序遍历都需要借助层数level这个变量。
  2. 递归的思想和队列的思想值得我们学习。
相关文章
|
2月前
【LeetCode 31】104.二叉树的最大深度
【LeetCode 31】104.二叉树的最大深度
24 2
|
2月前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
20 2
|
2月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
21 0
|
2月前
【LeetCode 38】617.合并二叉树
【LeetCode 38】617.合并二叉树
15 0
|
2月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
20 0
|
2月前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
21 0
|
2月前
【LeetCode 32】111.二叉树的最小深度
【LeetCode 32】111.二叉树的最小深度
19 0
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
62 6
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
124 2