leetcode 二叉树的最小深度

leetcode,二叉树,最小,深度 · 浏览次数 : 4

小编点评

```python class TreeNode: def __init__(self, val): self.val = val self.left = None self.right = None def minDepth(root): # If the root is null, return 0 if root is None: return 0 # Calculate the depth of the root node depth = 0 # If the left and right nodes are both null, return the depth of the root node if root.left is None and root.right is None: return depth # If the left node is null, calculate the depth of the right node and add 1 elif root.left is None: depth = depth + 1 return depth + minDepth(root.right) # If the right node is null, calculate the depth of the left node and add 1 elif root.right is None: depth = depth + 1 return depth + minDepth(root.left) # Return the minimum depth among the left and right subtrees return min(depth + minDepth(root.left), depth + minDepth(root.right)) ``` **Explanation:** 1. The `minDepth` function takes a TreeNode `root` as input. 2. It initializes `depth` to 0. This will store the minimum depth found among all possible paths from the root to the leaves. 3. If the `root` is `None`, it returns 0, indicating that the minimum depth is reached when the tree is empty. 4. If the `left` and `right` nodes are both `None`, it returns the depth of the root node, as it is the shortest path from the root to any leaf. 5. If the `left` node is `None`, it recursively calculates the minimum depth of the right subtree and adds 1 to it. 6. Similarly, if the `right` node is `None`, it recursively calculates the minimum depth of the left subtree and adds 1 to it. 7. The function chooses the minimum of the left and right subtree depths and returns it as the minimum depth. 8. The function uses a `depth + minDepth` approach to calculate the minimum depth, where `depth` represents the current depth from the root to the current node, and `minDepth` represents the minimum depth from the root to the leaves. 9. The function continues this process recursively until it reaches the leaves and returns the minimum depth it finds.

正文

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

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

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

示例 1:
image

输入:root = [3,9,20,null,null,15,7]
输出:2
示例 2:

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

解题思路

  1. 如果当前节点为null, 返回0
  2. 判断左节点的最小路径,和右节点的最小路径,然后取最小值,即为当前节点的最小深度
  3. 递归思想,从下到上,依次累加最小路径值,得到的值即为最小路径
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int minDepth(TreeNode root) {
        int depth = 0;
        if (root == null) {
            return depth;
        }
        depth += 1;
        if (root.left == null && root.right == null) {
            return depth;
        }
        if (root.left == null) {
            return depth + minDepth(root.right);
        } 
        if (root.right == null) {
            return depth + minDepth(root.left);
        }

        int leftDepth = depth + minDepth(root.left);
        int rightDepth = depth + minDepth(root.right);
        return leftDepth > rightDepth ? rightDepth : leftDepth;
    }
}

与leetcode 二叉树的最小深度相似的内容:

leetcode 二叉树的最小深度

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

二叉树的最小深度问题

二叉树的最小深度问题 作者:Grey 原文地址: 博客园:二叉树的最小深度问题 CSDN:二叉树的最小深度问题 题目描述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 题目链接见:LeetCode 111. Mini

leetcode 二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:3 示例 2: 输入:root = [1,null,2] 输出:2 解题思路 这里可以转化思路为

剑指 Offer 68 - II. 二叉树的最近公共祖先(java解题)

leetcode《图解数据结构》剑指 Offer 68 - II. 二叉树的最近公共祖先(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。

LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周跟大家讲到小彭文章风格的问题,和一些朋友聊过以后,至少在算法题解方面确定了小彭的风格。虽然竞赛算法题的文章受众非常小,但却有很多像我一样的初学者,他们有兴趣参加但容易被题目难度和大神选

刷爆 LeetCode 周赛 339,贪心 / 排序 / 拓扑排序 / 平衡二叉树

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 339 场周赛,你参加了吗?这场周赛覆盖的知识点比较少,前三题很简单,第四题上难度。 周赛大纲 2609. 最长平衡子字符串(Easy) 模拟:$O(n)$

剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java解题)

leetcode《图解数据结构》剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。

LeetCode 周赛 347(2023/05/28)二维空间上的 LIS 最长递增子序列问题

> **本文已收录到 [AndroidFamily](https://github.com/pengxurui/AndroidFamily),技术和职场问题,请关注公众号 [彭旭锐] 提问。** - 往期回顾:[LeetCode 单周赛第 346 场 · 仅 68 人 AK 的最短路问题](http

最大正方形问题

最大正方形问题 作者:Grey 原文地址: 博客园:最大正方形问题 CSDN:最大正方形问题 题目描述 在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。 题目链接见:LeetCode 221. Maximal Square 主要思路 本题思路比较简单,

LeetCode 周赛 348(2023/06/05)数位 DP 模板学会了吗

> **本文已收录到 [AndroidFamily](https://github.com/pengxurui/AndroidFamily),技术和职场问题,请关注公众号 [彭旭锐] 加入知识星球提问!** - 往期回顾:[LeetCode 单周赛第 347 场 · 二维空间上的 LIS 最长递增子