学习记录:js算法(四十四):二叉树的最大深度

server/2024/9/25 14:39:40/

文章目录

    • 二叉树的最大深度
      • 我的思路
      • 网上思路
    • 总结

二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

图一:
在这里插入图片描述

示例 1(如图一)
输入:root = [3,9,20,null,null,15,7]
输出:3示例 2:
输入:root = [1,null,2]
输出:2

我的思路
循环
网上思路
递归

我的思路

var maxDepth = function (root) {if (!root) return 0;const queue = [root];let depth = 0;while (queue.length > 0) {depth++;const levelSize = queue.length;for (let i = 0; i < levelSize; i++) {const node = queue.shift();if (node.left) queue.push(node.left);if (node.right) queue.push(node.right);}}return depth;
};

讲解

  1. 检查根节点: 如果根节点为空(即树是空的),则返回深度 0。这是基本情况。
  2. 初始化队列和深度:
    • 创建一个队列(使用数组实现),并将根节点添加到队列中。
    • 初始化深度变量 depth0,用于记录当前的深度。
  3. 开始层次遍历:
    • 使用 while 循环遍历队列,直到队列为空。这表示我们还没有遍历完所有层级的节点。
    • 每次进入 while 循环时,表示我们进入了下一层,因此将深度加 1
    • levelSize 变量记录当前队列的长度,即当前层的节点数量。我们将在这个范围内遍历当前层的所有节点。
  4. 遍历当前层的节点:
    • 使用 for 循环遍历当前层的所有节点。queue.shift() 从队列中移除并返回第一个节点,赋值给 node
    • 检查当前节点 node 是否有左子节点,如果有,则将其添加到队列中。
    • 同样检查右子节点,并将其添加到队列中。
  5. 返回最大深度

网上思路

var maxDepth = (root) => {if (!root) return 0; // 如果节点为空,深度为0return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1; // 返回左子树和右子树的最大深度加1
}

讲解

  1. 使用 Math.max 函数计算左子树和右子树的最大深度。
  2. 递归调用 maxDepth(root.left) 和 maxDepth(root.right) 分别计算左子树和右子树的深度。
  3. 最后加 1 表示当前节点本身。

总结

我怎么就没想到使用递归呢?


http://www.ppmy.cn/server/121861.html

相关文章

GPIO与MIO控制LED——ZYNQ学习笔记2

一、GPIO简介 ZYNQ 分为 PS 和 PL 两部分&#xff0c;那么器件的引脚&#xff08; Pin&#xff09;资源同样也分成了两部分。 ZYNQ PS 中的外设可以通过 MIO&#xff08; multiplexed I/O&#xff0c;多路复用 I/O&#xff09;模块连接到 PS 端的引脚上&#xff0c;也可以通过 …

Qt窗口——对话框

文章目录 对话框自定义对话框对话框分类消息对话框QMessageBox使用示例自定义按钮快速构造对话框 颜色对话框QColorDialog文件对话框QFileDialog字体对话框QFontDialog输入对话框QInputDialog 对话框 对话框可以理解成一个弹窗&#xff0c;用于短期任务或者简洁的用户交互 Qt…

MFC -文件类控件

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解MFC中的文件类 MFC文件类 在MFC中&#xff0c;CFILE 是基本的文件操作类&#xff0c;提供了读取、写入、打开、关闭等操作方法主要成员函数:Open(用于打开文件&#xff0c;设置模式 例如 只读 只写 读…

智能养殖场人机交互检测系统源码分享

智能养殖场人机交互检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Co…

项目(石头剪刀布游戏双循环)

while (true) { #region 猜拳游戏主题逻辑 // 定义猜拳次数 int count 3; //定义用户赢得次数 int winCount 0;// 初始值为零表示用户一次没饿赢 int sysCou…

深入探索迭代器模式的原理与应用

迭代器模式 &#x1f4bb; 迭代器模式 (Iterator Pattern) 是一种行为设计模式&#xff0c;它允许你顺序访问一个集合对象中的元素&#xff0c;而无需暴露其底层表示。在不同的数据结构中&#xff0c;如数组、链表或其他集合&#xff0c;它可以统一提供一种方式来逐个遍历这些元…

金属材质检测系统源码分享

金属材质检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Ubuntu20.04安装ros2

最近需要ubuntu上安装ros&#xff0c;试了很多的博客&#xff0c;会出现网络拒绝等问题。 今天试了一下鱼香ros的一键安装包&#xff0c;非常方便的帮我实现了安装。鱼佬的教程&#xff0c;又有视频又有博客&#xff0c;还有 一键安装包&#xff0c;简直是新手的福音。 强烈看…