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

111.二叉树的最小深度(二叉树算法题)

111.二叉树的最小深度

力扣题目链接(opens new window)

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

示例 1:

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

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

提示:

  • 树中节点数的范围在 [0, 105] 内
  • -1000 <= Node.val <= 1000

#思路

相对于 104.二叉树的最大深度 ,本题还也可以使用层序遍历的方式来解决,思路是一样的。

需要注意的是,只有当左右孩子都为空的时候,才说明遍历的最低点了。如果其中一个孩子为空则不是最低点。

/*** Definition for a binary tree node.* * public class TreeNode {*     int val;              // 节点的整数值*     TreeNode left;        // 指向左子节点的引用(指针),若无左子节点则为 null*     TreeNode right;       // 指向右子节点的引用(指针),若无右子节点则为 null*     *     // 默认构造函数:创建一个空节点(val 默认为 0)*     TreeNode() {}*     *     // 构造函数:根据给定的值创建一个节点,左右子节点默认为 null*     TreeNode(int val) { *         this.val = val; *     }*     *     // 构造函数:根据给定的值和左右子节点创建一个完整节点*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/class Solution {/*** 计算二叉树的最小深度。* * 二叉树的最小深度是从根节点到最近的叶子节点的最短路径上的节点数。* 叶子节点是指没有子节点的节点(即 left == null 且 right == null)。* * 算法使用层序遍历(广度优先搜索,BFS):* - 从根节点开始,逐层向下遍历。* - 一旦遇到第一个叶子节点,当前所在的层数就是最小深度。* - 因为 BFS 是按层进行的,所以第一个遇到的叶子节点一定是最浅的。* * 示例 1:* 输入:[3,9,20,null,null,15,7]*       3*      / \*     9  20*       /  \*      15   7* 输出:2* 解释:从根节点 3 到叶子节点 9 的路径长度为 2,是最小深度。* * 示例 2:* 输入:[2,null,3,null,4,null,5,null,6]*   2*    \*     3*      \*       4*        \*         5*          \*           6* 输出:5* 解释:这是一条单边树,最小深度就是整条路径的长度。* * @param root 二叉树的根节点* @return 返回二叉树的最小深度(整数)*/public int minDepth(TreeNode root) {// 创建一个队列用于实现广度优先搜索(BFS)// 队列中存储待处理的树节点Queue<TreeNode> queue = new LinkedList<>();// 如果根节点为空,说明树为空,最小深度为 0if (root == null) return 0;// 将根节点加入队列,作为遍历的起点queue.offer(root);// 记录当前遍历的深度(层数),初始为 0int depth = 0;// 当队列不为空时,说明还有节点未处理(即还有层未遍历完)while (!queue.isEmpty()) {// 记录当前层的节点数量// 这个值决定了内层循环需要处理多少个节点int len = queue.size();// 每进入一层,深度加一depth++;// 遍历当前层的所有节点(共 len 个)for (int i = 0; i < len; i++) {// 从队列头部取出一个节点进行处理TreeNode temp = queue.poll();// 关键判断:如果当前节点是叶子节点(没有左右子节点)// 说明我们找到了从根到叶子的最短路径,直接返回当前深度if (temp.left == null && temp.right == null) {return depth;}// 如果当前节点有左子节点,则将其加入队列,供下一层处理if (temp.left != null) {queue.offer(temp.left);}// 如果当前节点有右子节点,则将其加入队列,供下一层处理if (temp.right != null) {queue.offer(temp.right);}}// 当前层的所有节点处理完毕// 队列中现在存储的是下一层的所有节点(如果有)}// 理论上不会执行到这里,因为只要有节点,最终一定会遇到叶子节点// 但为了语法完整,返回 depth(处理极端情况)return depth;}
}

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

相关文章:

  • JavaWeb--day12--事务AOP
  • WebSocat 安装与使用
  • c程序调试命令
  • 锤子助手插件功能七十九:文件复读
  • 单县网站建设设计师网站源码
  • wordpress乐趣公园缩略图不显示单页面应用优化
  • 沧浪企业建设网站方法博客源码
  • Android开发-系统广播
  • 数据结构(长期更新)第1讲:算法复杂度
  • 中学网站模板网站建设的前端用什么编程
  • 做网站怎样快速收录广西省建设厅网站
  • 网站后台中文模板上海市黄页企业名录查询
  • 玩家自助充值网站建设织梦网站首页错位
  • 解读 2025《可信数据空间 数字合约技术要求》
  • __new__和__init__的区别是什么
  • 成都o2o网站建设wordpress资源采集插件
  • 中国建设网站官方网站我的世界做图片的网站
  • 张店网站建设定制中山网站建设最好的公司
  • 【开题答辩全过程】以 Springboot恒星科技学院学科竞赛管理系统的设计与实现为例,包含答辩的问题和答案
  • Kafka 安全性认证、加密、授权与落地最佳实践
  • 学校网站定位群晖nas wordpress
  • MySQL索引基础详细介绍
  • IDEA配置tomcat运行JavaWeb工程(附Tomcat8下载地址)
  • 强化学习(4)策略梯度与TD Learning
  • 多语言建设外贸网站中怎么做网站上下载图片的功能
  • 北京的网站建设公司有哪些怎么制作html文档
  • 资源网站平台建设方案帝国cms入门到精通企业门户网站制作建站视频教程
  • C++20中线程类std::jthread的使用
  • 拍卖行 网站建设爱奇艺的网站是用什么做的
  • 智能问答场景下的AI算力平台建设指南——从硬件选型到弹性扩展的全流程实践