leetcode111. 二叉树的最小深度(java)

news/2024/11/8 9:40:31/

二叉树的最小深度

  • leetcode111. 二叉树的最小深度
    • 题目描述
  • DFS 深度优先遍历
    • 解题思路
    • 代码演示
  • BFS 广度优先遍历
    • 解题思路
    • 代码演示
  • 往期经典

leetcode111. 二叉树的最小深度

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-depth-of-binary-tree

题目描述

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

示例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

DFS 深度优先遍历

解题思路

深度优先遍历时,和计算最大深度不同的是,最大深度只要拿到左右子树的最大深度,加上root 节点就行了,最小值就有一类特殊情况需要考虑了,我用图来演示:

|在这里插入图片描述
从根节点看,没有右树.这种情况下最小深度就是左树的深度4,因此代码里要对,没有左树和没有右树的情况做下判断.

代码演示

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int minDepth(TreeNode root) {if(root == null){return 0;}return process(root);}/*** dfs 深度优先遍历*/public int process(TreeNode root){//base case if(root == null){return 0;}//没有左右节点时,返回1,高度就是节点本身if(root.left == null && root.right == null){return 1;}int left = process(root.left);int right = process(root.right);//没有左树的情况if(left == 0 && right != 0){return right + 1;}//没有右树的情况if(left != 0 && right == 0){return left + 1;}//左树右树都有的情况下,返回最小深度加1return Math.min(left,right) + 1;}
}

BFS 广度优先遍历

解题思路

在这个题里使用BFS 比 DFS 的优势就在于最小深度,我们不需要遍历所有节点,计算出左右子树的深度,我们只要到最小深度结束时,停止就可以知道最小的深度了,时间复杂度会低很多.
如何判断合适停止呢,一个节点的左右节点都为null 时,就是结束了此时就可以返回最小深度了.

代码演示

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int minDepth(TreeNode root) {if(root == null){return 0;}return bfs(root);}/*** BFS */public int bfs(TreeNode root){Queue<TreeNode> queue = new LinkedList<>();//根节点加进去queue.offer(root);//跟节点本身的高度是1,所有深度初始化1 int depth = 1;//开始遍历while(!queue.isEmpty()){//每层的宽度int N = queue.size();//把一层遍历完for(int i = 0; i < N ;i++){TreeNode cur = queue.poll();//如果左右节点都是null 代表这个节点结束了,第一个结束的就是最小深度,直接返回if(cur.left == null && cur.right == null){return depth;}//左右节点加进去if(cur.left != null){queue.offer(cur.left);}if(cur.right != null){queue.offer(cur.right);}}//遍历完一层深度加1depth++;}return depth;}
}

直观的看下代码的逻辑:在这里插入图片描述
这代码里,while循环是对每层进行循环,for是每层节点进行循环,找出最先结束的点,来返回最小深度.

往期经典

leetcode46. 全排列

leetcode39. 组合总和

leetcode216. 组合总和 III

leetcode90. 子集 II

leetcode40. 组合总和 II

leetcode77. 组合

leetcode78 子集

leetcode47. 全排列 II


http://www.ppmy.cn/news/506206.html

相关文章

图的遍历——DFS, BFS(邻接矩阵,邻接表)——C语言描述

图的遍历——DFS, BFS&#xff08;邻接矩阵&#xff0c;邻接表&#xff09;——C语言描述 文章目录 图的遍历——DFS, BFS&#xff08;邻接矩阵&#xff0c;邻接表&#xff09;——C语言描述0 测试用例框架1 图的深度优先遍历&#xff08;DFS&#xff09;1.1 邻接矩阵&#xff…

Android10 电量在低于5%的时候自动关机

b/frameworks/base/services/core/java/com/android/server/BatteryService.java-358,6 358,10 public final class BatteryService extends SystemService {}private boolean shouldShutdownLocked() {// 电量低于5%且没有接任何电源if(mHealthInfo.batteryLevel < 5 &…

安卓手机自动关机的app

大家是否能写一个可以让安卓只能手机自动关机的app&#xff1f;

小米手机安装推特后频繁闪退

小米手机安装推特后频繁闪退 应该是缺少obb文件&#xff0c;下载一个xapk使用xapk installer安装后就可以了链接&#xff1a;https://download.csdn.net/download/KINGSLEY233/40493839 记得下个Google Play服务&#xff0c;虽然小米阉割了gms&#xff0c;但安装谷歌服务后还能…

小米手机关闭广告的方法,三步让你的小米手机跟广告说再见

每次小米手机使用的时候时不时都会弹出不必要的广告&#xff0c;一两次还好&#xff0c;要是频繁起来的话就非常惹人厌烦了&#xff0c;所以这次要给大家分享的就是小米手机关闭广告的操作。 操作开始&#xff0c;大家仔细看好哦&#xff01; 步骤1.首先要先打开小米中的【设置…

小米点歌系统服务器怎样设置定时关机,小米定时关机怎么设置 小米手机一键设置定时关机方法教程...

目前在国内是有很多的用户都正在使用小米手机的&#xff0c;而且很多的小米用户都在咨询要如何才能设置定时关机&#xff0c;所以今天小编就给大家介绍下小米手机设置定时关机的方法教程&#xff0c;赶紧一起来看看吧。 小米定时关机怎么设置 1&#xff0c;首先&#xff0c;打开…

夏天计算机自动关机,电脑频繁自动关机,原因可能出在这

很多人在使用电脑时&#xff0c;会出现各种问题&#xff0c;正好赶上急用电脑&#xff0c;而有时却束手无策。其实很多问题在你拿到维修店修理时&#xff0c;你会觉得原来就这点毛病啊。今天我们就来看看电脑频繁自动关机是怎么回事吧。 电脑自动关机有的很有规律&#xff0c;有…

K40自动重启/自动关机/时间系统混乱

接上一篇文章&#xff1a;K40自动重启的分析&#xff08;RTC&#xff09; 今天早上再次异常自动关机&#xff0c;醒来打不开手机&#xff0c;一看关机了&#xff0c;赶紧开机&#xff0c;看到时间瞬间抓瞎&#xff1a; 今天是4月21号&#xff0c;自动关机竟然回到了4月3号凌晨…