LeetCode题练习与总结:二叉树的最大深度--104

一、题目描述

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:3

示例 2:

输入:root = [1,null,2]
输出:2

提示:

  • 树中节点的数量在 [0, 10^4] 区间内。
  • -100 <= Node.val <= 100

二、解题思路

这个问题是求二叉树的最大深度,可以通过递归的方式来解决。递归的基本思路是,对于树的每个节点,它的深度等于其左右子树的最大深度加1。如果节点为空,则其深度为0。因此,我们可以定义一个递归函数,用于计算每个节点的深度。

算法步骤:

  1. 如果根节点为空,返回深度为0。
  2. 计算左子树的最大深度。
  3. 计算右子树的最大深度。
  4. 根节点的最大深度等于左右子树的最大深度中的较大者加1。
  5. 返回根节点的最大深度。

三、具体代码

class Solution {public int maxDepth(TreeNode root) {if (root == null) {return 0;}int leftDepth = maxDepth(root.left);int rightDepth = maxDepth(root.right);return Math.max(leftDepth, rightDepth) + 1;}
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 递归函数maxDepth对每个节点只调用一次,且每次调用所做的操作是常数时间的(比较左右子树的深度,并加1)。
  • 假设树中有n个节点,那么maxDepth会被调用n次。
  • 因此,总的时间复杂度是O(n),其中n是树中节点的数量。
2. 空间复杂度
  • 空间复杂度主要取决于递归调用栈的深度,这通常与树的高度h有关。
  • 在最坏的情况下,树是完全不平衡的,例如每个节点都只有左子节点或者只有右子节点,此时树的高度等于节点的数量,空间复杂度为O(n)。
  • 在最好的情况下,树是完全平衡的,此时树的高度为log(n),空间复杂度为O(log n)。
  • 因此,空间复杂度在O(log n)到O(n)之间,取决于树的形状。

综上所述,代码的时间复杂度是O(n),空间复杂度在O(log n)到O(n)之间,取决于树的形状。

五、总结知识点

  1. 递归:代码使用了递归的方式来计算二叉树的最大深度。递归是一种常用的算法技巧,它将问题分解为更小的子问题(在这个例子中是左右子树的最大深度),并通过函数自身调用来解决这些子问题。

  2. 二叉树:代码操作的是二叉树数据结构,二叉树是一种基础的数据结构,每个节点最多有两个子节点,即左子节点和右子节点。

  3. 递归的基本情况:递归函数通常有一个基本情况(base case),即递归退出的条件。在这个问题中,基本情况是当节点为空时,返回深度为0。

  4. 数学运算:代码使用了Math.max函数来比较左右子树的深度,并取其较大值。

  5. 函数返回值maxDepth函数返回一个整数,表示二叉树的最大深度。

  6. 节点定义:代码中使用了TreeNode类来定义二叉树的节点,每个节点包含一个整数值和指向左右子节点的引用。

  7. 类型转换:在递归调用中,maxDepth函数的返回值被隐式转换为整数类型。

  8. 递归调用栈:递归函数的调用会形成调用栈,用于存储每一层递归调用的局部变量和返回地址。

  9. 树的高度与深度:在二叉树中,根节点的深度为1,每个子节点的深度是其父节点深度加1。树的高度是从根节点到最远叶子节点的最长路径上的节点数。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP32开发环境搭建Windows VSCode集成Espressif IDF插件开发环境搭建 IDF_V5.2.1

一、安装Visual Studio Code 下载地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 打开上方链接&#xff0c;选择页面中的Windows版本&#xff0c;单击下载 将下载好的VSCodeUserSetup-x64-1.89.1.exe。单击右键&#xff0c;选择以管理员身份运行&#xf…

雪花算法 代码

/*** author lwh* date 2023/9/5* description 批量插入&#xff0c;手动设置**/ public class IdWorker {//因为二进制里第一个 bit 为如果是 1&#xff0c;那么都是负数&#xff0c;但是我们生成的 id 都是正数&#xff0c;所以第一个 bit 统一都是 0。//机器ID 2进制5位 3…

jenkins自动化部署详解

一、准备相关软件 整个自动化部署的过程就是从git仓库拉取最新代码&#xff0c;然后使用maven进行构建代码&#xff0c;构建包构建好了之后&#xff0c;通过ssh发送到发布服务的linux服务器的目录&#xff0c;最后在此服务器上执行相关的linux命令进行发布。 此篇文章jenkins…

gsap笔记

1.gsap基础 gsap.to() //从初始位置到设定位置 gsap.from() //从设定位置到初始位置 gsap.from("h1",{stagger:1 //设定末状态repeate:2 //重复次数yoyo: true //来回动画scale&#xff1a;1 //缩放倍数 }) //stagger:相同元素的按序播放…

【iOS安全】BurpSuite iOS https抓包 | DNS Spoofing

BurpSuite 完整版安装 参考&#xff1a;Admin Team 小数智 的博客 下载 Burp Suite 2021.6 官网下载地址 https://portswigger.net/burp/releases &#xff08;下载并安装好&#xff09; jdk 使用的是11.0.10 https://www.oracle.com/java/technologies/javase-jdk11-downl…

实用css整理

网页一键变灰 body{filter: grayscale(1); } 一般用于特殊时期&#xff0c;网页变灰&#xff0c;只需要给body标签添加这行样式代码。 一键换主题色 body {filter: hue-rotate(45deg);} 给body标签设置这个属性样式&#xff0c;改变角度看看效果吧。 设置字母大小写 p {t…

麦克纳母轮(全向)移动机器人集群控制的Simulink/Simscape虚拟仿真平台搭建

麦克纳姆轮是一种常见的全向移动机构&#xff0c;可以使机器人在平面内任意方向平移&#xff0c;同时可以利用差速轮车的属性实现自转&#xff0c;能够在狭窄且复杂多变的环境中自由运行&#xff0c;因而被广泛应用于竞赛机器人和特殊工业机器人场景。 Ps:最新的BYD仰望U8也有一…

项目启动失败,【consul】

如题&#xff0c;启动时项目未能正常启动&#xff0c;但上次都一切正常&#xff0c;日志提示&#xff1a; Consul service ids must not be empty, must start with a letter 经过排查是因为consul的consulconfigservice服务假死&#xff0c;导致无法正常获取到配置文件&am…

【全开源】Java无人共享棋牌室茶室台球室系统JAVA版本支持微信小程序+微信公众号

开启智能共享新时代 一、系统源码概述&#xff1a;引领自助服务潮流 随着科技的不断发展和人们生活节奏的加快&#xff0c;自助服务已逐渐成为人们生活中的一部分。为了满足市场对无人共享棋牌室、茶室、台球室的需求&#xff0c;我们推出了全新的无人共享系统源码。这套源码…

使用决策树对金融贷款数据进行分析

使用决策树对金融贷款数据进行分析 在本篇博客中&#xff0c;我们将通过使用 Python、Pandas 和多种机器学习技术&#xff0c;对一组贷款数据进行全面分析。通过详细的步骤展示&#xff0c;你将学会如何进行数据预处理、可视化分析以及构建预测模型。 第一步&#xff1a;导入…

Sping源码(七)—ConfigurationClassPostProcessor —— 后续处理

序言 前面的文章中介绍了 parser.parse(); 方法的整体处理逻辑&#xff0c; 其中包括Bean、Import、Configuration、CompopnentScan、Component等注解的解析。 来看看注解解析完的后续工作都做了些什么&#xff1f; 源码片段 简单回顾一下主方法processConfigBeanDefinition…

如何在Python爬蟲中設置代理伺服器?

在實際應用中&#xff0c;爬蟲可能會遇到各種限制&#xff0c;如IP封鎖、訪問限制等。通過使用代理伺服器&#xff0c;可以有效地繞過這些限制&#xff0c;提升爬蟲的效率和隱私保護。本文將詳細介紹如何在Python爬蟲中設置代理伺服器&#xff0c;包括使用requests、urllib、Sc…

Windows10安装Docker Desktop - WSL update failed

按照提示更新wsl后&#xff0c;仍然会报错&#xff0c;github上没有找到解决方法。版本28、29、30都会报这个错。 经过尝试&#xff0c;将docker内的设置中&#xff0c;采用wsl禁掉即可。如下图&#xff1a;

《球》

描述 输入球体的半径r&#xff0c;类型为double&#xff0c;求球的体积&#xff0c;结果保留3位小数。 (注&#xff1a;球的体积计算公式为V4/3∗π∗r3&#xff0c;此处π3.1415&#xff09; 输入描述 输入球体的半径r&#xff0c;类型为double 输出描述 求球的体积&#xf…

55. UE5 RPG 处理当前功能在多人模式中的问题

在UE里面&#xff0c;我们运行项目可以设置多种网络模式&#xff0c;主要是分为三种&#xff1a; 运行Standalone 就是单人模式&#xff0c;没有网络交互以监听服务器运行&#xff0c;在界面里运行的游戏会作为服务器使用以客户端运行&#xff0c;UE会单独运行一个线程作为服务…

Java 解析 Linux 不同压缩文件的方法及注意事项

背景 commons-compress 包提供了归档压缩文件的工具类&#xff0c;java.util 里面包含了 Zip 和 gz 文件的解压方法&#xff0c;最终以按扁平方式&#xff0c;遍历到全部文件的文件&#xff0c;包括子目录下的文件。使用 Java 实现的日志采集系统涉及到对压缩文件的解析&#…

【Linux】套接字的理解 基于TCP协议的套接字编程(单/多进程 / 线程池|英汉互译 / C++)

文章目录 1. 前言1.1 网络方面的预备知识&#x1f447;1.2 了解TCP协议 2. 关于套接字编程2.1 什么是套接字 Socket2.2 socket 的接口函数2.3 Udp套接字编程的步骤2.4 sockaddr 结构 3. 代码实现3.1 makefile3.2 log.hpp3.3 tcp_server.hpp① 框架② service() 通信服务③ init…

记录docker ps查找指定容器的几个命令

1.docker ps | grep registry 查询包含registry的容器 2.docker ps | grep -E "reigistry\s" 开启正则匹配模式&#xff0c;匹配registry后面为空格的容器&#xff0c;若是匹配一整行可以这样写docker ps | grep -E "^([0-9a-f]{12})\sregistry\s.*" 这…

电视机顶盒哪个牌子好?618畅销电视机顶盒排行榜

电视机顶盒是我们使用最多的&#xff0c;不管看直播、动画、追剧、上网课都少不了它的存在。大促期间很多朋友问我电视机顶盒哪个牌子好&#xff0c;小编按照各平台的销量情况整理了618畅销电视机顶盒排行榜&#xff0c;看看哪些品牌的电视机顶盒是最受欢迎的吧。 TOP 1&#x…

为了更全面地分析开发人员容易被骗的原因和提供更加深入的防范措施

为了更全面地分析开发人员容易被骗的原因和提供更加深入的防范措施&#xff0c;我们可以进一步探讨以下几个方面&#xff1a; 深入技术细节 不安全的代码注释和文档&#xff1a; 原因&#xff1a;开发人员在代码注释中可能会无意间透露敏感信息&#xff0c;如API密钥、密码或系…