LeetCode111. 二叉树的最小深度

news2024/11/17 3:29:25

111. 二叉树的最小深度

文章目录

      • [111. 二叉树的最小深度](https://leetcode.cn/problems/minimum-depth-of-binary-tree/)
        • 一、题目
        • 二、题解
          • 方法一:迭代
          • 方法二:递归


一、题目

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

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

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

示例 1:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yJFYKCKe-1690441782568)(D:\A_WHJ\Computer Science\typora图片\ex_depth.jpg)]

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

示例 2:

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

提示:

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

二、题解

方法一:迭代

算法思路

  1. 首先,我们定义一个辅助队列 deq 来进行广度优先搜索。
  2. 然后,我们判断根节点是否为空。如果为空,说明树是空树,深度为0,直接返回。
  3. 将根节点入队,同时初始化计数器 count 为0,用于记录当前层级的节点个数。
  4. 进入循环,直到队列为空:
    • 获取当前队列的节点个数 size,用于控制当前层级的遍历。
    • 逐个遍历当前层级的节点:
      • 弹出队列头部节点,并判断是否为叶子节点(左右子节点都为空),如果是,直接返回当前深度 count
      • 否则,将非空的左右子节点加入队列。
    • 遍历完当前层级后,count 加1,表示深度加1,即进入下一层级。
  5. 如果循环结束都没有找到叶子节点,则返回计数器 count 作为最小深度。

具体实现

class Solution {
public:
    int minDepth(TreeNode* root) {
        std::deque<TreeNode*> deq;
        if (root == nullptr) return 0;
        deq.push_back(root);
        int count = 0;
        while (!deq.empty()) {
            int size = deq.size();
            count++;
            for (int i = 0; i < size; i++) {
                TreeNode* node = deq.front();
                deq.pop_front();
                if (node->left == nullptr && node->right == nullptr) {
                    return count;
                }
                if (node->left) deq.push_back(node->left);
                if (node->right) deq.push_back(node->right);
            }
        }
        return count;
    }
};

算法分析

  • 时间复杂度:由于每个节点最多入队出队一次,所以整体时间复杂度为 O(n),其中 n 是树中节点的个数。
  • 空间复杂度:在最坏情况下,队列中最多同时保存一层的所有节点,所以空间复杂度为 O(w),其中 w 是树的最大宽度(即最大层级的节点数)。在平衡二叉树的情况下,宽度约为 n/2,因此空间复杂度可以近似看作 O(n)。
方法二:递归

算法思路

  1. 首先,我们需要处理一些边界情况。当根节点为空时,表示空树,最小深度为0,直接返回即可。
  2. 接着,我们可以利用递归来求解左右子树的最小深度。
  3. 如果当前节点的左子树为空或者右子树为空,那么最小深度就是非空子树的深度(深度大的一侧)加1,因为空子树那一侧肯定不可能有叶子节点(压根没有节点);如果两颗子树都是空子树,那么相当于直接返回1即可(节点为空直接返回0)。
  4. 如果当前节点的左右子树都不为空,那么最小深度就是左右子树的最小深度的较小值再加1,因为这时候两个子树都具有叶子节点,我们要做的就是找离根结点更近的叶子节点

具体实现

class Solution {
public:
    int minDepth(TreeNode* root) {
        // 1. 处理空树情况
        if (root == nullptr) {
            return 0;
        }

        // 2. 递归求解左右子树的最小深度
        int leftMinDepth = minDepth(root->left);
        int rightMinDepth = minDepth(root->right);

        // 3. 处理一空子树或者两空子树的情况
        if (!root->left || !root->right) {
            return max(leftMinDepth, rightMinDepth) + 1;
        }

        // 4. 处理左右子树都不为空的情况
        return min(leftMinDepth, rightMinDepth) + 1;
    }
};

算法分析

  • 时间复杂度:在最坏的情况下,我们需要遍历所有节点,时间复杂度为O(N),其中N为二叉树的节点数。
  • 空间复杂度:递归调用会使用到系统的栈空间,最坏的情况下,二叉树为链状结构,递归的深度为N,空间复杂度为O(N)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

理光310/320/325系列激光打印机加粉后不换芯片清零方法

设置步骤&#xff1a; 依次按停止107开始键进入维修模式&#xff0c; 按下键两次选择Engine Maintenance,点OK键进入&#xff0c; 按上键选择Refill mode项后点OK键&#xff0c; 按下键选择到Pure refill mode后点Ok键(默认是Auto refill mode)&#xff0c; 然后按两次后退…

GB/T 25000.51解读——软件产品的功能性怎么测?

前面的文章中&#xff0c;我们为大家整体介绍了GB/T 25000.51-2016《软件产品质量要求和测试细则》国家标准的结构和所涵盖的内容&#xff0c;从本文开始&#xff0c;我们将针对标准中规定的软件产品的八大质量特性进行详细解读。本文为大家解读软件产品的功能性测试。 软件产…

微服务契约测试框架-Pact

契约测试 契约测试的思想就是将原本的 Consumer 与 Provider 间同步的集成测试&#xff0c;通过契约进行解耦&#xff0c;变成 Consumer 与 Provider 端两个各自独立的、异步的单元测试。 契约测试的优点&#xff1a; 契约测试与单元测试以及其它测试之间没有重复&#xff0c…

java商城系统和php商城系统有什么差异?如何选择?

java商城系统和php商城系统是两种常见的电子商务平台&#xff0c;它们都具有一定的优势和劣势。那么&#xff0c;java商城系统和php商城系统又有哪些差异呢&#xff1f; 一、开发难度 Java商城系统和PHP商城系统在开发难度方面存在一定的差异。Java商城系统需要使用Java语言进…

小红书课程发光社群知识库,点亮哥专为超级个体设计解决方案

小红书课程点亮哥知识库 开创了学习小红书教育培训先河 针对超级个体轻创业的学习需求场景 创新推出了“知识库全新学习方式”。 一个人如何做好小红书? 超级个体轻创业,如何做好小红书? 通过打造个人IP、或者塑造老板个人品牌,来实现互联网变现,如何做好小红书? 就像挑…

系统架构设计师-软件架构设计(5)

目录 一、构件与中间件技术 1、软件复用 2、构件与中间件技术的概念 3、构件的复用 3.1 检索与提取构件 3.2 理解与评价构件 3.3 修改构件 3.4 组装构件 4、中间件 4.1 采用中间件技术的优点&#xff1a; 4.2 中间件的分类&#xff1a; 5、构件标准 5.1 CORBA&#xff08;公共…

Android 电子称定标流程

1、首先确保电子称正确安装&#xff0c;底部悬空&#xff0c;托盘悬空。 2、去皮&#xff0c;把去皮数据保存到本地 3、定标、例如拿100克的砝码放入托盘&#xff0c; 获取值-去皮值及得到定标值 4、通过定标值计算出需要设置的满量程&#xff0c;或者计算对应的重量&#x…

vue-element-admin中实现自适应功能

npm install postcss-px-to-viewport --save-dev 项目根目录下建一个名字为 .postcssrc.js 的js文件(前边的.别忘了)&#xff0c;在该文件里写以下代码 //添加如下配置&#xff1a; module.exports {plugins: {autoprefixer: {}, // 用来给不同的浏览器自动添加相应前缀&a…

小学期笔记——天天酷跑4

效果&#xff1a; 点击登录&#xff1a; ------------------------ 效果&#xff1a; 静态的一张图 ------------------------ 完善一下会变成那张静态的图从左往右移动&#xff0c;但是这一张图到后面会拉丝 -------------------- 再完善一下&#xff1a; &#xff08;再…

洗地机有没有必要买?好用的洗地机推荐

随着科技的发展&#xff0c;越来越多的家用电器出现。就比如在清洁家电方面&#xff0c;相继出现了吸尘器、扫地机、洗地机&#xff01;其中洗地机更是近年来爆火的一个智能清洁家电&#xff01;而如果你们和小编一样是个上班族&#xff0c;然后每天下班回家面对脏乱的地板&…

汽车UDS诊断深度学习专栏

1.英文术语 英文术语翻译Diagnostic诊断Onboard Diagnostic 在线诊断 Offboard Diagnostic离线诊断Unified diagnostic service简称 UDS 2.缩写表 缩写解释ISO国际标准化组织UDSUnified diagnostic service&#xff0c;统一的诊断服务ECU电控单元DTC 诊断故障码 ISO14229UD…

Modbus TCP/IP之异常响应

文章目录 一、异常响应二、异常码分析2.1 异常码0x012.2 异常码0x022.3 异常码0x032.4 异常码0x04、0x05等 一、异常响应 对于查询报文&#xff0c;存在以下四种处理反馈&#xff1a; 正常接收&#xff0c;正常处理&#xff0c;返回正常响应报文&#xff1b;因为通信错误等原因…

我对牟长青分享的各个私董会数据分析

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 其实之前&#xff0c;我也想写一个关于各个草根社群的数据分析&#xff0c;但这样的文章容易得罪人&#xff0c;因为我一直喜欢直言不讳&#xff0c;所以一直没有动笔。例如&#xff0c;我在6月份写…

OpenGl中的VAO、VBO与EBO

文章目录 VBO(顶点缓冲区对象)VBO的使用 EBO(索引缓冲对象)EBO的使用 VAO(顶点数组对象)VAO的使用 三者的区别someting。。。 哎&#xff0c;很离谱&#xff0c;上个月学learnopengl学到一半跑去看庄懂老师的视频&#xff0c;结果该还的东西迟早得还&#xff0c;再打开之前的工…

NineData支持最受欢迎数据库PostgreSQL

根据在 Stack Overflow 发布的 2023 开发者调研报告中显示&#xff0c;PostgreSQL 以 45% vs 41% 的受欢迎比率战胜 MySQL&#xff0c;成为新的最受欢迎的数据库。NineData 也在近期支持了 PostgreSQL&#xff0c;用户可以在 NineData 平台上进行创建数据库/Schema、管理用户与…

BTTES,2101505-88-6,是各种化学生物实验中生物偶联的理想选择

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 规格单位&#xff1a;g |货期&#xff1a;按照具体的库存进行提供 | 纯度&#xff1a;95% PART1----​试剂描述&#xff1a; BTTES是铜&#xff08;I&#xff09;催化的叠氮化物-炔烃环加成&#xff08;CuAAC&#x…

整数替换(力扣)HashMap + 递归 JAVA

给定一个正整数 n &#xff0c;你可以做如下操作&#xff1a; 如果 n 是偶数&#xff0c;则用 n / 2替换 n 。 如果 n 是奇数&#xff0c;则可以用 n 1或n - 1替换 n 。 返回 n 变为 1 所需的 最小替换次数 。 示例 1&#xff1a; 输入&#xff1a;n 8 输出&#xff1a;3 解释…

系统架构设计师-软件架构设计(4)

目录 一、软件架构评估 1、敏感点 2、权衡点 3、风险点 4、非风险点 5、架构评估方法 5.1 基于调查问卷或检查表的方式 5.2 基于度量的方式 5.3 基于场景的方式 6、基于场景的评估方法 6.1 软件架构分析法&#xff08;SAAM&#xff09; 6.2 架构权衡分析法&#xff08;ATAM&am…

vue 封装一个鼠标拖动选择时间段功能

<template><div class"timeRange"><div class"calendar"><table><thead><tr><th rowspan"6" class"weekRow"><b>周/时间</b></th><th colspan"24"><…

docker容器引擎(三)

docker 一、Docker 的数据管理1&#xff0e;数据卷2&#xff0e;数据卷容器 二、容器互联&#xff08;使用centos镜像&#xff09;三、docker镜像的创建创建镜像的方法DockerfileDocker 镜像结构的分层Dockerfile 操作常用的指令&#xff1a; 四、Dockerfile 案例 一、Docker 的…