二叉树的最小深度(递归)

二叉树的最小深度(递归)

问题重述:

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

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

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

示例 1:

二叉树的最小深度(递归)
输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

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

问题分析:

这道题要求我们找到二叉树的最小深度,那么就是要我们找到所有的叶子节点,并且再找到叶子结点的时候知道此时树的深度。

解法:

递归

解题:

代码:
public int minDepth(TreeNode root) {
        return minDepthProcess(root,1);
    }
// 原题只给了我们一个根节点,要求返回一个最小深度,我们需要自己再创建一个方法来实现
    public int minDepthProcess(TreeNode root,int minDepth){
        // 当根节点为null的时候,返回0
        if(root == null){
            return 0;
        }
        // 当前结点不为null,并且为叶子节点,将当前的深度返回(这就是递归退出条件)
        if(root.left == null && root.right == null){
            return minDepth;
        }
        int res = Integer.MAX_VALUE;
        if(root.left != null){
            // 当当前节点的左子节点不为null的时候,向左递归,最后的到的值是当前左树点中的最小深度
            res = Math.min(minDepthProcess(root.left,minDepth+1),res);
        }
        if(root.right != null){
            // 当当前的右子节点不为null的时候,向右递归,得到的是当前结点的子树中的最小深度(因为在此之前当前节点的左子树的最小深度就是res,因此现在向右递归,得到的是右子树中的最小深度,res就是子树的最小深度)
            res = Math.min(minDepthProcess(root.right,minDepth+1),res);
        }
        return res;
    }

代码解析:

递归的三要素:

递归停止条件:当前结点为叶子结点

递归中重复的操作:得到当前结点的最小深度,也就是调用我们自己这个方法,然后对参数进行修改

进入下一次递归:分别对左子树和右子树进行递归

Original: https://www.cnblogs.com/foldn/p/15942077.html
Author: foldn
Title: 二叉树的最小深度(递归)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/579750/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 研究一下JAVA robot类

    什么是机器人工具类 此工具类与qq机器人并 不相同,可以理解为 键盘与鼠标事件, 代替人对电脑执行操作 具体使用 /** * Constructs a Robot object i…

    Java 2023年6月7日
    090
  • 2022-8-16 mysql 第二天 约束

    重点,DQL是我们每天都要接触编写最多也是最难的SQL,该语言用来查询记录,不会修改数据库和表结构。 构建数据库 创建一张student表: DROP TABLE IF EXIST…

    Java 2023年6月13日
    079
  • Linux调整服务器时间

    最近在家弄个服务器,搞的外网映射,安装的虚拟机,发现时间有点问题,所以就做了一点调整。 同步时区 [root@localhost ~]# tzselect Please ident…

    Java 2023年6月5日
    081
  • [二分法]求解递增序列中与x最接近元素问题

    在一个非降序列序列中与给定值 x 最接近的元素 第一行包含一个整数 n,为非降序列长度 (1 Original: https://www.cnblogs.com/fordsonli…

    Java 2023年6月5日
    0107
  • 【SpringCloud-Alibaba系列教程】10.gateway网关

    简介 在SpringCloud中网关作为一个重要的组成部分,网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(…

    Java 2023年6月5日
    0109
  • Intellij IDEA 显示 access.log 日志

    先配置 SpringBoot 记录 access.log 日志,先让accesslog 显示出来 Original: https://www.cnblogs.com/vipsoft…

    Java 2023年6月13日
    080
  • 我使用Spring AOP实现了用户操作日志功能

    我使用Spring AOP实现了用户操作日志功能 今天答辩完了,复盘了一下系统,发现还是有一些东西值得拿出来和大家分享一下。 需求分析 系统需要对用户的操作进行记录,方便未来溯源 …

    Java 2023年6月9日
    083
  • 配置中心的设计-nacos vs apollo

    和 apollo 一样,nacos 也是一款配置中心,同样可以实现配置的集中管理、分环境管理、即时生效等等。不过,nacos 还具备了服务发现的功能。 分析 apollo 时,我们…

    Java 2023年6月14日
    081
  • 12.Zuul网关

    Zuul简介 网关介绍 由于微服务”各自为政的特性”使微服务的使用非常麻烦 通常我们会雇佣一个”传达室大爷”作为统一入口,这就是网关…

    Java 2023年6月8日
    085
  • 【Java面试手册-算法篇】给定一个整型数组,请判断是否为回文数组?

    对于一个给定的由正整数组成的数组 A[] ,如果将 A 倒序后数字的排列与 A 完全相同,则成数组A为回文数组。比如 [1, 2, 3, 2, 1] 是回文数组,而 [1, 2, …

    Java 2023年6月8日
    0108
  • 实现多项式的JAVA类

    1 package practice;2 // http://introcs.cs.princeton.edu/java/92symbolic/Polynomial.java.ht…

    Java 2023年5月29日
    073
  • 用spring 创建ComboPooledDataSource和JdbcTemplate对象

    用spring 创建ComboPooledDataSource和JdbcTemplate对象3.1添加ioc相关jar包 java;gutter:true; org.springf…

    Java 2023年6月13日
    077
  • JAVA中自定义扩展Swagger的能力,自动生成参数取值含义说明,提升开发效率

    大家好,又见面了。 在 JAVA做前后端分离的项目开发的时候,服务端需要提供接口文档供周边人员做接口的对接指导。越来越多的项目都在尝试使用一些基于代码自动生成接口文档的工具来 替代…

    Java 2023年6月7日
    087
  • 从Go编程看IO多路复用Epoll

    IO多路复用使得一个线程就可就可以处理多个网络连接,无需要创建多个线程来处理多个socket连接,减少不必要的资源开销,但是Select还是Poll、Epoll模式都有着不同的区别…

    Java 2023年6月16日
    082
  • SpringBoot整合MyBatis

    一、准备工作 首先新建一个空工程,springboot相关的整合都放在该工程下。 该空工程名称为spring-boot-example 创建好的空工程如下: 接着我们创建模块 注:…

    Java 2023年6月8日
    088
  • 说说用户线程和守护线程

    什么是用户线程和守护线程? 守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如 垃圾回收线程、 JIT线程都是 守护线程。与之对应的是 用户线程,用户线程可以理解为是…

    Java 2023年6月15日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球