当前位置: 首页 > news >正文

LeeCode104. 二叉树的最大深度,LeeCode111. 二叉树的最小深度

LeeCode104. 二叉树的最大深度

题目描述

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

思路解析

要计算二叉树的最大深度,我们可以采用递归的方法。因为二叉树的结构是递归定义的,所以递归非常适合这种问题。

具体来说,对于每一个节点,它的最大深度等于其左子树的最大深度和右子树的最大深度中的较大者,再加上当前节点本身(即 +1)。如果当前节点为空,则说明到达了叶子节点的下一层,此时深度为 0。

例如,对于如下二叉树:

    3/ \9  20/  \15   7

它的最大深度是 3(3 → 20 → 15 或 3 → 20 → 7)。

Java 实现

public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}
}public 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;}
}

这段代码非常简洁,逻辑清晰。通过递归调用,我们能够轻松地遍历整个树,并找到最大深度。

注意事项

  • 当树为空时,返回 0。
  • 如果只有一个根节点,那么最大深度是 1。
  • 递归方法的时间复杂度是 O(n),其中 n 是树中的节点总数。

LeeCode111. 二叉树的最小深度

题目描述

给定一个二叉树,找出其最小深度。
最小深度是指从根节点到最近的叶子节点的最短路径上的节点数量。

思路解析

这道题与前一道题类似,但有一个关键的区别:叶子节点是指没有子节点的节点。因此,在计算最小深度时,不能简单地取左右子树的最小值,而是需要考虑是否存在空子树的情况。

比如,如果一个节点只有左子树而没有右子树,那么该节点的最小深度应该是左子树的最小深度加 1,而不是直接取左右子树的最小值。否则可能会误判为 0,导致错误。

因此,我们需要特别处理这种情况。

Java 实现

public class Solution {public int minDepth(TreeNode root) {if (root == null) {return 0;}// 如果左子树为空,只看右子树if (root.left == null) {return minDepth(root.right) + 1;}// 如果右子树为空,只看左子树if (root.right == null) {return minDepth(root.left) + 1;}// 否则取左右子树的最小值return Math.min(minDepth(root.left), minDepth(root.right)) + 1;}
}

这段代码通过判断左右子树是否为空,避免了因空子树而导致的错误计算。例如,当某个节点只有一个子树时,我们不会将其视为叶子节点,而是继续向下查找。

注意事项

  • 当树为空时,返回 0。
  • 如果只有一个根节点,那么最小深度是 1。
  • 时间复杂度同样是 O(n),空间复杂度取决于递归栈的深度。

三、最大深度 vs 最小深度

虽然这两道题都涉及二叉树的深度计算,但它们在处理方式上有明显差异。

特性最大深度最小深度
定义根到最远叶子的节点数根到最近叶子的节点数
处理空子树可以忽略,直接取另一侧必须特殊处理,避免误判
递归逻辑直接比较左右子树需要判断是否有空子树
应用场景检查树的高度检查树的“扁平”程度

四、常见误区

误区一:将最小深度等同于最大深度

很多人会认为,只要把 Math.max 改成 Math.min 就能解决问题。但实际上,这样的做法忽略了对空子树的处理,容易导致错误结果。

例如,对于以下树:

    1\2\3

它的最小深度是 3,但如果使用简单的 Math.min 方法,可能会得到错误的结果。

误区二:未正确识别叶子节点

叶子节点必须是没有子节点的节点。如果只是判断 left == null && right == null,那在某些情况下可能会漏掉一些情况。

误区三:忽略边界条件

比如,当树为空时,应该返回 0;当只有一个节点时,返回 1。这些边界条件如果不处理,可能导致程序崩溃或返回错误结果。


LeetCode 104. 二叉树的最大深度

LeetCode 111. 二叉树的最小深度

http://www.xdnf.cn/news/1433971.html

相关文章:

  • 动手学深度学习
  • 2025年IT行业女性职业发展证书选择指南
  • 企业微信怎么用能高效获客?拆解体检品牌如何实现私域营收提升
  • ReactAgent接入MCP服务工具
  • WMT2014:机器翻译领域的“奥林匹克盛会“
  • 【Unity开发】丧尸围城项目实现总结
  • 双八无碳小车cad+三维图+仿真+设计说明书
  • 快速入门Vue3——基础语法
  • SpringBoot RestTemplate 设置http请求连接池
  • 一个真正跨平台可用的免费PDF解决方案
  • 同步整流芯片为何容易受损?如何应对呢?
  • 第十七讲:编译链接与函数栈帧
  • 电机控制(二)-控制理论基础
  • 互联网向无线通信发展的关键历史时期
  • 睿思芯科正式加入龙蜥社区,携手共建 RISC-V 服务器生态新标杆
  • thinkphp6通过workerman使用websocket
  • ArkUI核心功能组件使用(一)
  • 强化学习PPO/DDPG算法学习记录
  • 01 - 网页和web标准
  • Spring Boot数据脱敏方案
  • java-设计模式-5-创建型模式-建造
  • quant, 量化交易,合约,期货心得,短线交易心得
  • Vue3 + GSAP 动画库完全指南:从入门到精通,打造专业级网页动画
  • 人工智能与强化学习:使用OpenAI Gym进行项目开发
  • 【小白笔记】使用 robocopy 解决大文件复制难题:从踩坑到精通
  • 第四届可再生能源与电气科技国际学术会议(ICREET 2025)
  • 如何修改 Docker 默认网段(网络地址池)配置:以使用 10.x.x.x 网段为例
  • CH01-1.1 Exercise-Ordinary Differential Equation-by LiuChao
  • 【代码随想录day 22】 力扣 131.分割回文串
  • DevOps部署与监控