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

day19-二叉树的最大最小深度

二叉树的最大/最小深度

给定一个二叉树 root ,返回其最大/小深度。

二叉树的 最大/小深度 是指从根节点到最远/近叶子节点的最长路径上的节点数。

思路

求最大深度比较简单,我们先解决最大深度。

最大深度

递归

class Solution {
public:int maxDepth(TreeNode* root) {if(root == null)return 0;return max(maxDepth(root->left),maxDepth(root->right))+1;}
};

非常简单的一句代码。但是理解起来却有点难度。

终止条件为:root == null时返回0。

想一想,当结点为空时,此时高度是不存在的,因此返回0。

而递归的逻辑是:我们需要在根节点的左子树和右子树中选最大值,所以这里用max(x,y)返回。

当递归到空节点开始返回,一开始返回0,后面逐渐+1…,到根节点就得到这颗子树的高度。

层序遍历

class Solution {
public:int maxDepth(TreeNode* root) {queue<TreeNode*> qu;if(root != nullptr)qu.push(root);else return 0;int ans = 0;while(!qu.empty()){int size = qu.size();for(int i=0;i<size;i++){TreeNode* node = qu.front();qu.pop();if(node->left != nullptr)qu.push(node->left);if(node->right != nullptr)qu.push(node->right);}ans++;}return ans;}
};

这里用的是层序遍历,也即是广度优先,对每一层的结点进行遍历,然后同时ans++;

其实最大深度就是求的最大高度,因此有多少层可以遍历即高度多少。

最小深度

递归

  • 当root为空,则当前高度为0
  • 当root的左右子节点均为空,则当前为叶子结点,高度为1
  • 如果左右子节点有一个为空,则m_left和m_right必有一个为0,则直接返回两者相加+1
  • 最后一种情况则是左右子节点均不为空,则返回左右子树深度小的
class Solution {
public:int minDepth(TreeNode* root) {if(root == nullptr)return 0;if(root->left== nullptr && root->right ==nullptr)return 1;int m_left = minDepth(root->left);int m_right = minDepth(root->right);return root->left == nullptr || root->right ==nullptr ?m_left+m_right+1:min(m_right,m_left)+1;}
};

层序遍历

相比递归,BFS要简单的多,我们只需要找到第一个叶子节点,然后返回即可,找不到,没关系,继续遍历下一层。

class Solution {
public:int minDepth(TreeNode* root) {queue<TreeNode*> qu;if(root != nullptr)qu.push(root);else return 0;int ans = 1;while(!qu.empty()){int size = qu.size();for(int i=0;i<size;i++){TreeNode* cur = qu.front();qu.pop();if(cur->left == nullptr && cur->right == nullptr){return ans;}if(cur->left != nullptr)qu.push(cur->left);if(cur->right != nullptr)qu.push(cur->right);}ans++;}return ans;}
};

注意的是,ans一开始初始化为1,是因为根节点自身便带有高度,只有空结点会为0。

相关文章:

day19-二叉树的最大最小深度

二叉树的最大/最小深度 给定一个二叉树 root &#xff0c;返回其最大/小深度。 二叉树的 最大/小深度 是指从根节点到最远/近叶子节点的最长路径上的节点数。 思路 求最大深度比较简单&#xff0c;我们先解决最大深度。 最大深度 递归 class Solution { public:int maxD…...

Ansible-roles

Ansible-roles 一、roles作用 把playbook剧本里的各个play看作为角色&#xff0c;将各个角色的tasks任务、vars变量、templates模板、files文件等内容放置到角色的目录中统一管理&#xff0c;需要的时候可在playbook中直接使用roles调用&#xff0c;所以roles可以实现playboo…...

NullPointerException导致手机重启案例分析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、 Framework 层对象 空指针导致手机重启。二、解决方案&#xff0c;规避空指针三、Telecom APK 控制导致的重启举例 一、 Framework 层对象 空指针导…...

JAVA 反编译工具

Releases deathmarine/Luyten GitHub 安装exe 打开拖入文件即可...

(AcWing)分组背包问题

有 N 组物品和一个容量是 V 的背包。 每组物品有若干个&#xff0c;同一组内的物品最多只能选一个。 每件物品的体积是 vij&#xff0c;价值是 wij&#xff0c;其中 i 是组号&#xff0c;j 是组内编号。 求解将哪些物品装入背包&#xff0c;可使物品总体积不超过背包容量&…...

JSP项目国际化词条统计

国际化字条匹配并导出为excel格式 需求 将jsp页面里的key值&#xff0c;就是<spring:message code"gsyezer_Single_crystal"/>里的gsyezer_Single_crystal。和对应的字条对应上&#xff0c;并以excel表格形式输出。 jsp页面key值示例 <label for"&…...

Java课题笔记~ MyBatis缓存

为了减少重复查询给数据库带来的压力&#xff0c;MyBatis提供了缓存机制&#xff0c;这种机制能够缓存查询的结果&#xff0c;避免重复的查询。 MyBatis提供了两种缓存方式&#xff1a; 一种为针对于SqlSession的缓存【默认开启】 另一种为针对于全局的缓存【手动开启】 一…...

数据结构--循环队列、链队

基础知识 //循环队列数据结构 typedef struct { QElemType data[MaxQSize];//数据域 int front,rear; //队头队尾指针 }SqQueue; //链队结点数据结构 typedef struct QNode { int data;//数据域 struct QNode* next;//指针域 }QNode, * QueuePtr; typedef struct { struct Q…...

hbuilderx主题色分享-github风格

效果 步骤 hbuilderx总共有三种主题&#xff0c;绿柔主题Default,酷黑主题Monokai,雅黑主题Atom One Dark,修改主题色是基于三种主题之一的&#xff0c;不能直接创建一个新主题&#xff0c;比如下方配置是基于Atom One Dark(对象名为[Atom One Dark])&#xff0c;则当前hbuild…...

【C++】类与对象(1)

文章目录 前言一、什么是类1.类的定义2.类的访问限定符3.类的作用域 二、类的实例化三、类对象的存储方式四、this指针总结 前言 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。C是基于面向对象的&#x…...

Java课题笔记~ MyBatis核心配置

一、核心配置文件概览 MyBatis配置文件中有MyBatis框架的核心配置&#xff0c;负责对MyBatis进行全局管理。它包含许多控制MyBatis功能的重要元素。 <configuration><!--设置配置文件--><properties><property name"" value""/>…...

从0开始自学网络安全(黑客)

前言 黑客技能是一项非常复杂和专业的技能&#xff0c;需要广泛的计算机知识和网络安全知识。你可以参考下面一些学习步骤&#xff0c;系统自学网络安全。 在学习之前&#xff0c;要给自己定一个目标或者思考一下要达到一个什么样的水平&#xff0c;是学完找工作&#xff08;…...

kotlin 编写一个简单的天气预报app(四)增加界面显示

编写界面来显示返回的数据 用户友好性&#xff1a;通过界面设计和用户体验优化&#xff0c;可以使天气信息更易读、易理解和易操作。有效的界面设计可以提高用户满意度并提供更好的交互体验。 增加城市名字的TextView <TextViewandroid:id"id/textViewCityName"…...

英语不好能学好Python吗?Python常用英文单词汇总

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 有些小可爱对英语好不好对学习python有没有什么影响有着很深的疑惑。 其实python学习&#xff0c;主要靠多敲多练&#xff0c;主打一个熟能生巧 那今天我就给大家带来Python常用英文单词汇总&#xff0c; 新手期小可…...

Counting Stars 2023“钉耙编程”中国大学生算法设计超级联赛(5)hdu7335

Problem - 7335 题目大意&#xff1a;如果一个点连接着k个点&#xff0c;就称这k1个点构成k星图&#xff0c;现给出一个大小为n的图&#xff0c;问2星图的数量^3星图的数量^...^n星图的数量是多少 3<n<1e6;1<m<1e6 思路&#xff1a;因为边数总共不超过1e6&#…...

浅谈document.write()输出样式

浅谈document.write()输出样式 js中的最基本的命令之一&#xff1a;document.write&#xff08;&#xff09;&#xff0c;用于简单的打印内容到页面上&#xff0c;可以逐字打印你需要的内容——document.write("content"),这里content就是需要输出的内容&#xff1b;…...

AIGC(Artificial Intelligence and Graph Computing)职业发展路径和前景如何?

目录 一、AIGC 基本概念二、AIGC 市场规模三、AIGC 未来发展前景四、AIGC 职业发展路径五、AIGC 技能要求六、AIGC 相关公司 AIGC&#xff08;Artificial Intelligence and Graph Computing&#xff09;是人工智能和图计算的结合&#xff0c;它是一种用于处理大规模复杂数据的计…...

MySql006——基本的SELECT查询语句

在《MySql003——结构化查询语言SQL基础知识》中&#xff0c;我们学习了有关SQL的基础知识&#xff0c;也知道SQL中查询语句SELECT使用最为频繁 接下来我们将学习一些基本的SELECT查询语句 一、SELECT语句的通用语法 在MySQL数据库中&#xff0c;使用SELECT语句可以查询数据…...

【啥都生】分类项目中的模型搭建代码解析

def build_model(cfg):if isinstance(cfg, list):modules [eval(cfg_.pop("type"))(**cfg_) for cfg_ in cfg]return Sequential(*modules)else:return eval(cfg.pop("type"))(**cfg)b站up啥都生维护的分类项目 这段代码的功能是完成模型搭建&#xff0c;…...

Ubuntu出现了内部错误

使用的Ubuntu版本是18.04&#xff0c;使用的时候弹出对话框说出现了内部错误&#xff0c;好奇是哪里出现了错误&#xff0c;查找了一下解决的办法&#xff0c;记录一下。 参考解决方案&#xff1a;ubantu出现了内部错误 一旦程序崩溃过一次&#xff0c;就会生成一个.crash文件…...

英伟达816亿营收+国产2000亿参数图像模型:AI军备赛再升级

英伟达Q1&#xff1a;816亿美元营收&#xff0c;AI算力王依然碾压 大家好&#xff0c;我是LeafStay。 今天凌晨&#xff0c;英伟达交出了一份让全市场都松口气的财报。 2027财年Q1&#xff08;截至2026年4月&#xff09;&#xff0c;英伟达营收816亿美元&#xff0c;同比增长…...

PaddleOCR训练集制作避坑指南:从text_renderer合成到roLabelImg标注的全链路解析

PaddleOCR训练集制作全流程实战&#xff1a;从数据合成到模型调优的完整方法论 在工业级OCR项目落地过程中&#xff0c;数据集质量往往比模型架构更能决定最终效果上限。不同于学术界的标准benchmark竞赛&#xff0c;真实业务场景面临字体缺失、背景干扰、版式多变等复杂挑战。…...

瑞芯微RV1126在无人机视觉AI应用:从芯片选型到部署实战

1. 项目概述&#xff1a;当国产芯遇上天空之眼最近几年&#xff0c;无人机早已不是航拍发烧友的专属玩具&#xff0c;它在农业植保、电力巡检、安防监控、测绘建模等专业领域大放异彩。在这些场景里&#xff0c;无人机不再仅仅是“会飞的相机”&#xff0c;它需要成为一台“会飞…...

ElevenLabs高棉文语音突然失效?2024年Q2政策更新后,这6类柬埔寨手机号注册账号已被静默降权

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;ElevenLabs高棉文语音的基本能力与本地化适配现状 ElevenLabs 作为全球领先的AI语音合成平台&#xff0c;自2023年Q4起逐步支持高棉语&#xff08;Khmer&#xff0c;语言代码&#xff1a;km-KH&#xff09;&a…...

别只盯着apt-get install:深入理解Linux头文件路径与编译器搜索机制的坑

别只盯着apt-get install&#xff1a;深入理解Linux头文件路径与编译器搜索机制的坑 当你在Linux环境下进行C/C开发时&#xff0c;是否曾遇到过这样的场景&#xff1a;明明已经安装了所有看似必要的依赖包&#xff0c;却依然被fatal error: drm.h: No such file or directory这…...

3步掌握:如何用 iztro 实现紫微斗数自动化排盘

3步掌握&#xff1a;如何用 iztro 实现紫微斗数自动化排盘 【免费下载链接】iztro ⭐This is a lightweight kit for generating astrolabes for Zi Wei Dou Shu (The Purple Star Astrology), an ancient Chinese astrology. It allows you to obtain your horoscope and pers…...

YOLOv8无人机红外识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)

摘要 面向无人机平台的红外目标检测在夜间及低能见度环境下具有重要应用价值。本文基于YOLOv8构建了一套针对车辆与行人的红外检测系统&#xff0c;数据集包含4类目标&#xff08;Car、DontCare、OtherVehicle、Person&#xff09;&#xff0c;共计10128张训练图像、715张验证…...

【Prometheus监控Linux系统】

提示&#xff1a;本文原创作品&#xff0c;良心制作&#xff0c;干货为主&#xff0c;简洁清晰&#xff0c;一看就会 文章目录前言一、环境介绍二、安装node_exporter2.1 安装docker2.2 安装docker-compose2.3 安装node_exporter三、修改prometheus配置3.1 修改prometheus.yml3…...

免费暗黑2存档编辑器终极指南:3分钟成为游戏存档修改大师

免费暗黑2存档编辑器终极指南&#xff1a;3分钟成为游戏存档修改大师 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2的存档问题烦恼吗&#xff1f;角色属性不够强、装备不理想、任务进度丢失……现在&#xf…...

杰理之人声消除会有杂音问题修改方法【篇】

原因&#xff1a;消人声应该以立体声的音频数据来参考处理&#xff0c;由于DAC输出选择了左右差分方式&#xff0c;会在消人声的数据流节点前加了一个节点将右边声道进行反相处理&#xff0c;导致消原音的数据不是立体声数据&#xff0c;消除效果不好。...