CC1-二叉树的最小深度

目录

一、题目描述

二、解题思路

(一)递归的核心思想

(二)算法步骤

三、代码实现

(一)完整代码

(二)代码解释

四、测试结果

五、总结


一、题目描述

求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。

示例:输入:[1,2,3,4,5]返回值:2

二、解题思路

(一)递归的核心思想

通过递归的方式,从根节点开始,分别计算左右子树的最小深度,然后取较小值加 1(加上当前根节点),得到整个二叉树的最小深度。需要注意的是,当根节点的左子树或右子树为空时,不能简单地取 0,因为叶子节点必须同时没有左右子节点,所以这种情况下要取非空的子树的深度加 1。

(二)算法步骤

  1. 处理空树情况 :如果根节点 root 为 null,直接返回 0,因为空树没有节点,深度为 0。
  2. 处理左子树为空的情况 :如果根节点的左子树 root.left 为 null,那么最小深度由右子树的最小深度决定,递归计算右子树的最小深度并加 1(加上当前根节点)。
  3. 处理右子树为空的情况 :如果根节点的右子树 root.right 为 null,那么最小深度由左子树的最小深度决定,递归计算左子树的最小深度并加 1(加上当前根节点)。
  4. 处理左右子树都不为空的情况 :此时,最小深度是左子树最小深度和右子树最小深度中的较小值,再加上当前根节点,即 Math.min(run(root.left), run(root.right)) + 1。

三、代码实现

(一)完整代码

复制代码
import java.util.*;

// 定义二叉树节点类
class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
}

public class Solution {
    /**
     * @param root TreeNode类 
     * @return int整型
     */
    public int run(TreeNode root) {
        if (root == null) {
            return 0;
        }
        if (null == root.left) {
            return run(root.right) + 1;
        }
        if (null == root.right) {
            return run(root.left) + 1;
        }
        return Math.min(run(root.left), run(root.right)) + 1;
    }

    // 测试代码
    public static void main(String[] args) {
        // 构建示例中的二叉树 [1,2,3,4,5]
        TreeNode root = new TreeNode();
        root.val = 1;

        TreeNode node2 = new TreeNode();
        node2.val = 2;
        root.left = node2;

        TreeNode node3 = new TreeNode();
        node3.val = 3;
        root.right = node3;

        TreeNode node4 = new TreeNode();
        node4.val = 4;
        node2.left = node4;

        TreeNode node5 = new TreeNode();
        node5.val = 5;
        node2.right = node5;

        Solution solution = new Solution();
        int minDepth = solution.run(root);
        System.out.println("二叉树的最小深度为:" + minDepth);
    }
}

(二)代码解释

  • TreeNode 类 :定义了二叉树的节点结构,包含值 val 以及左右子节点 left 和 right。
  • run 方法:核心的递归方法,按照上述解题思路计算二叉树的最小深度。
  • main 方法 :用于测试,构建了示例中的二叉树,并调用 run 方法计算最小深度,最后输出结果。

四、测试结果

运行测试代码,输入构建的二叉树 [1,2,3,4,5],输出结果为:

复制代码
二叉树的最小深度为:2

与题目示例的预期结果一致,说明代码正确实现了二叉树最小深度的计算。

五、总结

通过递归的方法,我们高效地解决了二叉树最小深度的计算问题。在处理过程中,需要特别注意叶子节点的定义(同时没有左右子节点),避免在子树为空时错误地计算深度。这种递归的思路在树的相关问题中非常常见,掌握它有助于解决更多复杂的树结构问题。

相关推荐
学长毕设3 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw4 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
Yuzhiyuxia4 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
UIU1144 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
源码集结号5 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场5 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi5 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
啃瓜子的松鼠5 小时前
泛微OAe9-后端二开异步调用
java
秋天的怀念_David6 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放6 小时前
Python基础语法练习题(73)
java·前端·python