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

CC1-二叉树的最小深度

目录

一、题目描述

二、解题思路

(一)递归的核心思想

(二)算法步骤

三、代码实现

(一)完整代码

(二)代码解释

四、测试结果

五、总结


一、题目描述

求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。

示例:输入:[1,2,3,4,5]返回值:2

二、解题思路

(一)递归的核心思想

通过递归的方式,从根节点开始,分别计算左右子树的最小深度,然后取较小值加 1(加上当前根节点),得到整个二叉树的最小深度。需要注意的是,当根节点的左子树或右子树为空时,不能简单地取 0,因为叶子节点必须同时没有左右子节点,所以这种情况下要取非空的子树的深度加 1。

(二)算法步骤

  1. 处理空树情况:如果根节点 root 为 null,直接返回 0,因为空树没有节点,深度为 0。
  2. 处理左子树为空的情况:如果根节点的左子树 root.left 为 null,那么最小深度由右子树的最小深度决定,递归计算右子树的最小深度并加 1(加上当前根节点)。
  3. 处理右子树为空的情况:如果根节点的右子树 root.right 为 null,那么最小深度由左子树的最小深度决定,递归计算左子树的最小深度并加 1(加上当前根节点)。
  4. 处理左右子树都不为空的情况:此时,最小深度是左子树最小深度和右子树最小深度中的较小值,再加上当前根节点,即 Math.min(run(root.left), run(root.right)) + 1

三、代码实现

(一)完整代码

import java.util.*;// 定义二叉树节点类
class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;
}public class Solution {/*** @param root TreeNode类 * @return int整型*/public int run(TreeNode root) {if (root == null) {return 0;}if (null == root.left) {return run(root.right) + 1;}if (null == root.right) {return run(root.left) + 1;}return Math.min(run(root.left), run(root.right)) + 1;}// 测试代码public static void main(String[] args) {// 构建示例中的二叉树 [1,2,3,4,5]TreeNode root = new TreeNode();root.val = 1;TreeNode node2 = new TreeNode();node2.val = 2;root.left = node2;TreeNode node3 = new TreeNode();node3.val = 3;root.right = node3;TreeNode node4 = new TreeNode();node4.val = 4;node2.left = node4;TreeNode node5 = new TreeNode();node5.val = 5;node2.right = node5;Solution solution = new Solution();int minDepth = solution.run(root);System.out.println("二叉树的最小深度为:" + minDepth);}
}

(二)代码解释

  • TreeNode 类:定义了二叉树的节点结构,包含值 val 以及左右子节点 left 和 right
  • run 方法:核心的递归方法,按照上述解题思路计算二叉树的最小深度。
  • main 方法:用于测试,构建了示例中的二叉树,并调用 run 方法计算最小深度,最后输出结果。

四、测试结果

运行测试代码,输入构建的二叉树 [1,2,3,4,5],输出结果为:

二叉树的最小深度为:2

与题目示例的预期结果一致,说明代码正确实现了二叉树最小深度的计算。

五、总结

通过递归的方法,我们高效地解决了二叉树最小深度的计算问题。在处理过程中,需要特别注意叶子节点的定义(同时没有左右子节点),避免在子树为空时错误地计算深度。这种递归的思路在树的相关问题中非常常见,掌握它有助于解决更多复杂的树结构问题。

http://www.dtcms.com/a/486536.html

相关文章:

  • 把 Python 应用打包成 Mac 应用程序 — 完整指南
  • 阿里云监控:SLS的使用
  • C语言面试题答案版(ai生成)
  • 做网站发广告重庆建站模板
  • 吃透大数据算法-用 “任务排队” 讲透 Kahn 算法的核心
  • 外贸网站建设 全球搜天津网址
  • MeshGPT:三角形网格生成的Decoder-Only Transformer范式解析
  • vllm论文中 内部碎片原因
  • 重庆市设计公司网站wordpress 计数js版
  • linux中mount的本质是什么?自己如何实现一个伪文件系统
  • wordpress哪个编辑器好用吗长春网站优化咨询
  • 深度学习经典网络解析:ResNet
  • qingdao城乡住房建设厅网站网站建设中的策略
  • 字节数开一面
  • 页面转wordpress辛集seo网站优化电话
  • 优化推广网站seo讷河做网站公司
  • ASP的checkbox
  • 【个人成长笔记】在Ubuntu中将Linux系统的文件夹名称从中文改回英文的完整指南
  • Hosmer-Lemeshow检验:逻辑回归模型拟合优度的守护者
  • 主流机器学习算法的快速应用指南
  • 优惠码购买lisahost季付款VPS评测分享
  • Samba共享服务搭建
  • k8s 持久化存储方案-NFS
  • 建一个网站都需要什么开发软件用什么编程软件
  • 北京网站设计优刻如何将网站上传到空间
  • 大模型嵌入 vs ES:语义搜索与关键字搜索
  • 仓颉编程(1)环境配置变量
  • 我们来学AI编程 -- vscode开发java
  • HTML之table表格经典CSS(可用它做简单的数据看板)
  • 石家庄学做网站建设培训班安卓手机怎么做网站