【问题描述】[简单]

【解答思路】

1. 递归

自下而上
基本情况/结束条件 :
叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点
当 root 节点左右孩子都为空时,返回 1
当 root 节点左右孩子有一个为空时,返回不为空的孩子节点的深度
当 root 节点左右孩子都不为空时,返回左右孩子较小深度的节点值

递推关系:遍历二叉树

复杂度

class Solution {public int minDepth(TreeNode root) {if(root == null) return 0;//这道题递归条件里分为三种情况//1.左孩子和有孩子都为空的情况,说明到达了叶子节点,直接返回1即可if(root.left == null && root.right == null) return 1;//2.如果左孩子和由孩子其中一个为空,那么需要返回比较大的那个孩子的深度        int m1 = minDepth(root.left);int m2 = minDepth(root.right);//这里其中一个节点为空,说明m1和m2有一个必然为0,所以可以返回m1 + m2 + 1;if(root.left == null || root.right == null) return m1 + m2 + 1;//3.最后一种情况,也就是左右孩子都不为空,返回最小深度+1即可return Math.min(m1,m2) + 1; }
}

代码可以进行简化,当左右孩子为空时 m1和 m2 都为 0,可以和情况 2 进行合并,即返回 m1+m2+1

class Solution {public int minDepth(TreeNode root) {if(root == null) return 0;int m1 = minDepth(root.left);int m2 = minDepth(root.right);//1.如果左孩子和右孩子有为空的情况,直接返回m1+m2+1//2.如果都不为空,返回较小深度+1return root.left == null || root.right == null ? m1 + m2 + 1 : Math.min(m1,m2) + 1;}
}
class Solution {public int minDepth(TreeNode root) {if (root == null) {return 0;}if ((root.left == null) && (root.right == null)) {return 1;}int min_depth = Integer.MAX_VALUE;if (root.left != null) {min_depth = Math.min(minDepth(root.left), min_depth);}if (root.right != null) {min_depth = Math.min(minDepth(root.right), min_depth);}return min_depth + 1;}
}
2. BFS广度优先遍历

一个优化的方法是利用广度优先搜索,我们按照树的层去迭代,第一个访问到的叶子就是最小深度的节点,这样就不用遍历所有的节点了。
1.特判
2.root入队 ,左右节点非空入队
3.找到第一个左右节点均为空的节点即是答案

时间复杂度:O(N) 空间复杂度:O(N)

  public int minDepth(TreeNode root) {if (root == null)return 0;Queue<TreeNode> queue = new LinkedList<>();queue.add(root);//入队int level = 0;while (!queue.isEmpty()) {//队列不为空就继续循环level++;int levelCount = queue.size();for (int j = 0; j < levelCount; j++) {TreeNode node = queue.poll();//出队//如果当前node节点的左右子树都为空,直接返回level即可if (node.left == null && node.right == null)return level;if (node.left != null)queue.add(node.left);if (node.right != null)queue.add(node.right);}}return -1;}

【总结】

1. 相关题目

[Leetcode][第104题][JAVA][二叉树的最大深度][递归][BFS]

2.递归

在实现递归函数之前,有两件重要的事情需要弄清楚:

递推关系:一个问题的结果与其子问题的结果之间的关系。
基本情况:不需要进一步的递归调用就可以直接计算答案的情况。可理解为递归跳出条件。
一旦我们计算出以上两个元素,再想要实现一个递归函数,就只需要根据递推关系调用函数本身,直到其抵达基本情况。

3.递归模板套路

递归模板套路
由下到上

有上到下

区别

参考链接:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/solution/li-jie-zhe-dao-ti-de-jie-shu-tiao-jian-by-user7208/
参考链接:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/solution/java-di-gui-he-fei-di-gui-liang-chong-fang-shi-de-/
递归学习资料:https://leetcode-cn.com/circle/article/koSrVI/

[Leetcode][第111题][JAVA][BFS][二叉树的最小深度][BFS][递归]相关推荐

  1. 二叉树-二叉树的最小深度(递归法)

    题意: 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 思路: 这里使用递归的方法,找二叉树的最小深度 1.先判断根节点是否为空,是返回0: 2.调用函数遍 ...

  2. Leetcode-111 二叉树的最小深度(递归)

    给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 输入:root = [3,9,20,null,null,15,7] 输 ...

  3. [Leetcode][第130题][JAVA][被围绕的区域][DFS][BFS]

    [问题描述][中等] [解答思路] 1. 深度优先搜索 使用深度优先搜索实现标记操作.在下面的代码中,我们把标记过的字母 O 修改为字母 A. 复杂度 class Solution {int[] dx ...

  4. [Leetcode][第95题][JAVA][不同的二叉搜索树 II][递归]

    [问题描述][中等] [解答思路] 1. 递归 复杂度 class Solution {public List<TreeNode> generateTrees(int n) {if (n ...

  5. [Leetcode][第104题][JAVA][二叉树的最大深度][递归][BFS]

    [问题描述][简单] [解答思路] 1. 递归 终止条件/基本情况 root ==null 递推关系 max(l,r)+1 时间复杂度:O(N) 空间复杂度:O(height) class Solut ...

  6. [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...

  7. [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...

  8. [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]

    [问题描述][中等] [解答思路] 用哈希表/数组存储每个数字对应的所有可能的字母,然后进行回溯操作. 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是 ...

  9. LeetCode解析------111. 二叉树的最小深度-深度优先搜索

    题目: 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,15 ...

最新文章

  1. POJ 3268 D-Silver Cow Party
  2. 生产环境:Nginx高可用方案
  3. [转]XPS转JPG转换器
  4. NR 5G UE初始接入流程
  5. UA MATH563 概率论的数学基础 鞅论初步8 鞅收敛定理
  6. EL之Boosting之GB(DTR):简单回归问题使用梯度提升法(DIY数据集+DTR模型+调两参)
  7. python树莓派系统_树莓派系统 Raspbian Buster 发布
  8. ubuntu下的各种环境变量
  9. 如何在一小时内更新100篇文章?-Evernote Sync插件介绍
  10. SAP License:SAP与中国电子技术标准化研究院开展交流活动
  11. matlab 数组范围内,MATLAB索引超出数组范围
  12. PowerShell中远程管理简单配置
  13. Flume案例之采集特定目录的数据到HDFS
  14. C#网络编程(Socket编程)
  15. 使用猎码的浏览器组件开发安卓H5打包APK
  16. 获取手机屏幕的宽高 html,js获取手机屏幕宽度、高度
  17. 凶猛的长城汽车:走在挑战万亿市值的征途上
  18. 更改qq服务器中文件夹权限,win10QQ提示安装路径无效您没有权限的两种解决办法...
  19. Opencv imread读取图片结果一直为空
  20. 用java实现简单的银行管理系统

热门文章

  1. 数据库 数据库SQL语句五
  2. tomcat学习笔记1
  3. MDI窗体简单方法(调用,闪屏)
  4. 刚装了fedora 17,装机必备,解决视频格式和中文输入法。
  5. CodeSite日志使用
  6. C# 格式化字符串 String.Format
  7. 中通滤波matlab,如何用MATLAB将低通改成中通滤波器
  8. c java c时间格式处理_c:foreach 对时间类型进行格式化
  9. 华强北二代悦虎1562M升级固件图文教程(详细多图文)
  10. 关于 spring MVC 配置自动扫描中 use-default-filters 属性