当前位置: 首页 > article >正文

LeetCode 111.二叉树的最小深度

题目描述

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

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

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

示例 1:

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

示例 2:

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

提示:

  • 树中节点数的范围在 [0, 10^5] 内
  • -1000 <= Node.val <= 1000

思路

首先要注意到本题中最小深度的定义:最小深度是从根节点到最近叶子节点的最短路径上的节点数量。注意是这里是叶子节点,即左右孩子均为空的节点。

本题笔者选择使用递归法来解决。

递归三部曲:

  1. 确定递归函数的参数和返回值。参数为要传入的二叉树根节点,返回的是int类型的深度。
  2. 确定终止条件。终止条件是遇到空节点返回0,表示当前节点的高度为0。
  3. 确定单层递归的逻辑。如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。如果右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。如果左右子树都不为空,返回左右子树深度最小值 + 1 。

代码

C++版:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    // 递归法,后序遍历
    int getHeight(TreeNode* node){
        if(node==NULL) return 0;
        int leftHeight=getHeight(node->left); // 左
        int rightHeight=getHeight(node->right); // 右
        // 中
        if(node->left==NULL && node->right!=NULL){
            return rightHeight+1;
        }   
        if(node->left!=NULL && node->right==NULL){
            return leftHeight+1;
        }
        return min(leftHeight,rightHeight)+1;
    }
    int minDepth(TreeNode* root) {
        return getHeight(root);
    }
};

Python版:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    # 递归法,后序遍历
    def getHeight(self, node):
        if node is None:
            return 0
        leftHeight = self.getHeight(node.left)  # 左
        rightHeight = self.getHeight(node.right)  # 右
        
        # 当一个左子树为空,右不为空,这时并不是最低点
        if node.left is None and node.right is not None:
            return 1 + rightHeight
        
        # 当一个右子树为空,左不为空,这时并不是最低点
        if node.left is not None and node.right is None:
            return 1 + leftHeight
        
        result = 1 + min(leftHeight, rightHeight)
        return result

    def minDepth(self, root: Optional[TreeNode]) -> int:
        return self.getHeight(root)
        

需要注意的地方

1.求二叉树的最小深度和求二叉树的最大深度的差别主要在于处理左右孩子不为空的逻辑。

2.注意一种特殊的情况:根节点的左子树为空,而右子树不为空,如果使用【104.二叉树的最大深度】中对中节点的处理方法height=1+min(leftHeight,rightHeight)则会得到错误的最小深度1。


http://www.kler.cn/a/507838.html

相关文章:

  • 【Linux】Socket编程-TCP构建自己的C++服务器
  • 若依分页插件失效问题
  • 【力扣Hot 100】普通数组1
  • 【Uniapp-Vue3】uni-api交互反馈showToast的使用方法
  • [Collection与数据结构] PriorityQueue与堆
  • 利用爬虫获取某学习软件的考试题库(带源码)
  • 【原创】大数据治理入门(1)《大数据治理入门:为什么重要?》入门必看 高赞实用
  • SpringBoot3集成Sa-Token详解
  • windows下安装并使用node.js
  • 【Python】第二弹---深入理解编程基础:从常量、变量到注释的全面解析
  • Docker 镜像加速的配置
  • thinkphp:实现压缩文件上传、解压、文件更名、压缩包删除功能,增加trycatch
  • MyBatis基于XML的详细使用-缓存
  • 用户中心项目教程(一)--Ant design pro初始化的学习和使用
  • 什么是.NET中的反射,它有哪些应用场景
  • 包装类和简单认识泛型
  • RPA赋能内容创作:打造小红书入门词语图片的全自动化流程
  • 【Python】深入探讨Python中的单例模式:元类与装饰器实现方式分析与代码示例
  • 【Mysql进阶知识】Mysql 程序的介绍、选项在命令行配置文件的使用、选项在配置文件中的语法
  • 甲骨实物高保真数据归国,AI助力古文释读,发现甲骨新图像
  • python(25) : 含有大模型生成的公式的文本渲染成图片并生成word文档(支持flask接口调用)
  • Linux 35.6 + JetPack v5.1.4之 pyCUDA升级
  • OpenAI与Axios合作扩展新闻行业AI应用
  • 设计模式(4)行为模式
  • 正则表达式 匹配特定字符后的所有字符
  • SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输