LeetCode每日一题--二叉树的最小深度

简介: LeetCode每日一题--二叉树的最小深度

前言


算法的重要性不言而喻!区分度高!

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

提前入门学习书籍:CPrimerPlus、大话数据结构

image.png


刷题网站


代码随想录 (programmercarl.com)

leetcode

我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以

刷题嘛,最重要的就是坚持了!!!


画图软件


OneNote

这个要经常用,遇见不懂的流程的话就拿它画一画!


笔记软件


Typoral


题目


image.png


解析


这题值得注意的一点就是,最小深度。 什么是最小深度呢? 根节点到叶子结点(没有子节点的节点)距离。题目中其实说的也很清晰。

递归解法

怎么说呢,递归三部曲呗

  1. 确定递归的参数和返回值
  2. 递归结束的条件
  3. 单层递归的逻辑

递归就是这三句话,把每一步都考虑清楚了,写递归就不会出错

确定递归的参数和返回值

我们一想,递归的目的是干啥的?不就为了计算二叉树的深度?那返回值不就是个int类型的数据? 那参数呢?我们每次要传入什么给这个递归函数?当然是左右子树了。所以递归函数如下

public int minDepth(TreeNode root){}

递归结束的条件

当节点为空的时候代表已经到头了,所以如下为递归结束


if (root == null) { return 0; }

确定单层递归的逻辑

这里的有个注意点:当左子树为空的时候,二叉树的最小深度不是为1哦。

因为题目说了最小深度是根节点到叶子结点的最小距离,它都为空了它哪里有叶子结点呢?

所以如果二叉树的左子树为空,那么最小深度就应该去判断右子树,看根节点到右子树叶子节点的距离


int leftDepth = minDepth(root.left);
int rightDepth = minDepth(root.right);
if (root.left == null) {
    return rightDepth + 1;
}
if (root.right == null) {
    return leftDepth + 1;
}
// 左右结点都不为null
return Math.min(leftDepth, rightDepth) + 1;

完整代码如下: 前面的一些细节已经说清楚了,完整代码也可以很好的理解了!


class Solution {
    /**
     * 递归法,相比求MaxDepth要复杂点
     * 因为最小深度是从根节点到最近**叶子节点**的最短路径上的节点数量
     */
    public int minDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int leftDepth = minDepth(root.left);
        int rightDepth = minDepth(root.right);
        if (root.left == null) {
            return rightDepth + 1;
        }
        if (root.right == null) {
            return leftDepth + 1;
        }
        // 左右结点都不为null
        return Math.min(leftDepth, rightDepth) + 1;
    }
}



相关文章
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
57 6
|
1月前
【LeetCode 31】104.二叉树的最大深度
【LeetCode 31】104.二叉树的最大深度
19 2
|
1月前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
16 2
|
1月前
【LeetCode 28】102.二叉树的层序遍历
【LeetCode 28】102.二叉树的层序遍历
15 2
|
1月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
19 0
|
1月前
【LeetCode 38】617.合并二叉树
【LeetCode 38】617.合并二叉树
14 0
|
1月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
17 0
|
1月前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
17 0
|
1月前
【LeetCode 32】111.二叉树的最小深度
【LeetCode 32】111.二叉树的最小深度
16 0
|
3月前
|
存储 算法
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题
文章深入探讨了二叉树的层序遍历方法,并展示了如何通过队列实现层序遍历的算法逻辑,同时指出掌握层序遍历技巧可以帮助解决LeetCode上的多道相关题目。
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题