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;
    }
}



相关文章
|
4天前
二叉树oj题集(LeetCode)
二叉树oj题集(LeetCode)
|
4天前
|
算法
LeetCode[题解] 1261. 在受污染的二叉树中查找元素
LeetCode[题解] 1261. 在受污染的二叉树中查找元素
17 1
|
4天前
力扣面试经典题之二叉树
力扣面试经典题之二叉树
18 0
|
4天前
leetcode代码记录(二叉树的所有路径
leetcode代码记录(二叉树的所有路径
12 0
|
4天前
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
8 0
|
4天前
leetcode代码记录(二叉树的最小深度
leetcode代码记录(二叉树的最小深度
9 0
|
4天前
leetcode代码记录(二叉树的最大深度
leetcode代码记录(二叉树的最大深度
9 0
|
4天前
leetcode代码记录(翻转二叉树
leetcode代码记录(翻转二叉树
7 0
|
4天前
leetcode代码记录(二叉树的层序遍历
leetcode代码记录(二叉树的层序遍历
12 0
|
4天前
|
算法
leetcode代码记录(二叉树递归遍历
leetcode代码记录(二叉树递归遍历
8 0