前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-111. 二叉树的最小深度(java)

LeetCode-111. 二叉树的最小深度(java)

作者头像
bug菌
发布2023-05-27 15:17:47
1290
发布2023-05-27 15:17:47
举报

一、前言:

👨‍🎓作者:bug菌 ✏️博客:​​CSDN​​​、​​掘金​​等 💌公众号:​​猿圈奇妙屋​​ 🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。 🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

二、题目描述:

题目:

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

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

具体请看如下示例:

示例 1:

LeetCode-111. 二叉树的最小深度(java)_子树
LeetCode-111. 二叉树的最小深度(java)_子树
代码语言:javascript
复制
输入:root = [3,9,20,null,null,15,7]
 输出:2

示例 2:

代码语言:javascript
复制
输入:root = [2,null,3,null,4,null,5,null,6]
 输出:5

提示:

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

题目来源: ​​LeetCode官网​​题目难度:⭐⭐

三、思路分析:

       题目给定:最小深度是从根节点到最近叶子节点的​​最短路径​​上的节点数量。解题思路还是递归,万金油解题思路!凡是遇到二叉树题,递归也是我最能想到的,哈哈哈,但是还是存在很大的优化空间的,比如深度优先搜索或者广度优先搜索。具体思路及解题步骤请看如下:

  • 当前节点 root 为空时,说明此处树的高度为 0。
  • 当前节点 root 的左子树和右子树都为空时,说明此处树的高度为 1。
  • 如果为其他情况,则说明当前节点有值,且需要分别计算其左右子树的最小深度,返回最小深度进行+1,+1 表示当前节点存在有 1 个深度。

四、算法实现:

AC代码

具体算法代码实现如下:

代码语言:javascript
复制
class Solution {
     public int minDepth(TreeNode root) {
  
         //当前节点为空,直接返回0
         if(root == null) {
             return 0;
         }
  
         //左右节点皆空,直接返回1.
         if(root.left == null && root.right == null) {
             return 1;
         }
  
         //若当前节点有值,则分别计算左右节点的最小深度。
         int ans = Integer.MAX_VALUE;
  
         //计算左节点的最小深度。
         if(root.left != null) {
             ans = Math.min(minDepth(root.left), ans);
         }
  
         //计算右节点的最小深度。
         if(root.right != null) {
             ans = Math.min(minDepth(root.right), ans);
         }
  
         //进行+1
         return ans + 1;
     }
 }

五、总结:

leetcode提交运行结果截图如下:

LeetCode-111. 二叉树的最小深度(java)_子树_02
LeetCode-111. 二叉树的最小深度(java)_子树_02

复杂度分析:

  • 时间复杂度:O(n),其中 n 是树的节点数。对每个节点访问一次。
  • 空间复杂度:O(h),其中 h 是树的高度。空间复杂度主要取决于递归时栈空间的开销,最坏情况下,树呈现链状,空间复杂度为 O(n)。平均情况下树的高度与节点数的对数正相关,空间复杂度为O(logn)。 

       如上就是采用的​​深度优先搜索​​思路进行的破题,还有我提到的广度优先,不知道大家对这种思路解法是否了解,你们也可以去试试,这里我就不给大家都演示了,我是觉得写起来代码上是有些不同的,你们去试试就知道啦。

       再者,解题道路千万条,欢迎小伙伴们脑洞大开,如果你们有啥更好的想法或者思路,欢迎评论区告诉我哦,大家一起互相借鉴互相学习,方能成长的更快。

       好啦,以上就是本期的所有内容啦,咱们下期见咯。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言:
  • 二、题目描述:
  • 三、思路分析:
  • 四、算法实现:
  • 五、总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档