【二叉树】LC 104.二叉树的最大深度
文章目录前言一、题目1、原题链接2、题目描述二、个人思路整理1、思路分析DFS递归解法时间复杂度O(n) 、空间复杂度O(h)BFS层序遍历解法时间复杂度O(n)、空间复杂度O(w)2、解题代码递归解法时间复杂度O(n) 、空间复杂度O(h)迭代解法时间复杂度O(n)、空间复杂度O(w)三、知识风暴前言本专栏文章为《LeetCode 热题 100》的刷题题解相关内容如有侵权立即删除。一、题目1、原题链接104.二叉树的最大深度2、题目描述二、个人思路整理1、思路分析DFS递归解法时间复杂度O(n) 、空间复杂度O(h)递归终止条件当前节点为空则直接返回递归体分别递归计算左、右子树的深度取最大值当前节点所在子树的深度即为最大值1。复杂度分析时间复杂度O ( n ) \mathcal{O}(n)O(n)每个节点都会被遍历一次其中n nn为节点总数。空间复杂度O ( h ) \mathcal{O}(h)O(h)取决于递归调用的栈深度其中h hh为树的高度最坏情况下退化为链表时为O ( n ) \mathcal{O}(n)O(n)平衡二叉树时为O ( log ⁡ n ) \mathcal{O}(\log n)O(logn)。BFS层序遍历解法时间复杂度O(n)、空间复杂度O(w)利用队列依次【循环将每层的节点入队在处理每层节点时循环出队元素在每个节点出队时将其左、右孩子入队如果有方便下一轮循环】同时在处理完每层节点时记录层层数直至队列为空最终答案即为最大深度。复杂度分析时间复杂度O ( n ) \mathcal{O}(n)O(n)遍历所有节点。空间复杂度O ( w ) \mathcal{O}(w)O(w)队列中最多保存树中节点较多那一层的节点数即树的最大宽度w ww。2、解题代码递归解法时间复杂度O(n) 、空间复杂度O(h)/** * 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) {} * }; */classSolution{public:intmaxDepth(TreeNode*root){if(rootnullptr){return0;}returnmax(maxDepth(root-left),maxDepth(root-right))1;}};迭代解法时间复杂度O(n)、空间复杂度O(w)/** * 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) {} * }; */classSolution{public:intmaxDepth(TreeNode*root){if(rootnullptr){return0;}queueTreeNode*q;q.push(root);intans0;while(!q.empty()){intsizeq.size();//记录当前层的节点数控制下面循环次数如果不记录这个值而是直接用q.size()作为循环判断条件则会导致死循环//处理当前层的size个节点同时将下一层即这个size个节点的孩子放入队列while(size--){TreeNode*tmpq.front();q.pop();if(tmp-left!nullptr){q.push(tmp-left);}if(tmp-right!nullptr){q.push(tmp-right);}}ans;//每处理完一层深度1}returnans;}};三、知识风暴DFS与BFS易错点总结BFS 必须先固定每层节点数进入每层遍历前必须用int size q.size();固定当前层节点数量切忌直接把q.size()写在循环条件中因为入队新节点会改变q.size()导致把下一层节点混入当前层引发死循环或深度统计错误。深度累加时机ans必须在处理完一整层节点后执行而非每弹出单个节点就累加。

相关新闻

Linux硬链接与软链接原理详解:从Inode到ls/stat/find实战识别

Linux硬链接与软链接原理详解:从Inode到ls/stat/find实战识别

1. 文件链接的本质:从存储原理说起在Linux世界里,文件链接是个既基础又容易让人混淆的概念。很多朋友在操作文件时,可能会遇到两个文件名指向同一个内容的情况,或者一个快捷方式指向另一个文件。这背后就是硬链接和软链接&#xf…

2026/10/18 19:23:44 阅读更多 →
传统商协会管理难?一套商协会管理系统完整落地方案

传统商协会管理难?一套商协会管理系统完整落地方案

一、前言:商协会数字化转型迫在眉睫商会、行业协会、学会、研究会等社会团体,普遍存在多年线下管理遗留痛点:会员档案 Excel 零散存储,入会、换届、退会流程全线下,审批效率极低;会费收缴靠人工通知&#x…

2026/10/18 1:31:32 阅读更多 →
从 SEGW 元数据到真正可运行的 OData 服务,彻底搞懂 Runtime Artifacts 的生成机制

从 SEGW 元数据到真正可运行的 OData 服务,彻底搞懂 Runtime Artifacts 的生成机制

在 SAP Gateway Service Builder 里完成一个项目的数据模型定义后,项目树看起来往往已经相当完整。Entity Type 有了,Entity Set 有了,属性、关联关系以及数据源映射也可能已经配置妥当。可到了这个阶段,浏览器还不能因为这些设计时定义就直接访问我们的业务数据,SAPUI5 和…

2026/10/16 16:26:32 阅读更多 →

最新新闻

从需求拆解到部署:基于深度学习的口罩识别系统实战

从需求拆解到部署:基于深度学习的口罩识别系统实战

口罩识别这种项目,这几年几乎成了目标检测入门的标准练手题。但说实话,真正把它做成一个能稳定跑的落地系统,和跑通一个开源notebook之间的差距,比很多人想象得大得多。这篇文章就从我实际做完一个基于深度学习的口罩识别系统出发…

2026/10/18 19:23:20 阅读更多 →
SQLCipher 3.0.1 Windows 安装指南:加密数据库部署与排错

SQLCipher 3.0.1 Windows 安装指南:加密数据库部署与排错

简介:SQLCipher 3.0.1 Windows发行包,面向需要在Windows环境里使用SQLCipher加密SQLite数据库的C/C开发者。它内置现成库文件和命令行工具,省去手动编译开源库的步骤,可用于数据加密、解密及日常数据库管理。全部内容共18个文件&a…

2026/10/18 19:23:20 阅读更多 →
Linux虚拟机必备:open-vm-tools安装配置与避坑指南

Linux虚拟机必备:open-vm-tools安装配置与避坑指南

不管你现在用的是物理机上的VMware Workstation,还是公司里那套ESXi集群,只要跑的是Linux虚拟机,我建议你第一件事就是把open-vm-tools装上。没装这个东西之前,你可能只是觉得虚拟机“能用”:能开机、能联网、能装软件…

2026/10/18 19:23:20 阅读更多 →
HDFS中Secondary NameNode:不是备胎,是检查点助手

HDFS中Secondary NameNode:不是备胎,是检查点助手

1. 项目概述1.1 核心需求解析关于Hadoop生态,市面上讨论NameNode和DataNode的资料汗牛充栋,但提到Secondary NameNode,很多人的第一反应往往是“备胎”——以为它是NameNode的热备,随时准备在NameNode宕机后顶上。这个理解&#x…

2026/10/18 19:23:20 阅读更多 →
BrowserSkill:面向终端的浏览器自动化CLI工具

BrowserSkill:面向终端的浏览器自动化CLI工具

1. 项目概述:BrowserSkill 是什么,它解决的到底是什么问题? BrowserSkill 这个名字乍一听像某个浏览器插件,或者某个 Chrome 扩展的代号,但其实它完全不是。我第一次在 GitHub 上看到 browserskill 这个仓库时&…

2026/10/18 19:23:20 阅读更多 →
WFQ加权公平队列C/C++实现:从原理到二次开发

WFQ加权公平队列C/C++实现:从原理到二次开发

简介:这是一份面向网络编程学习者与通信方向开发者的WFQ(加权公平队列)算法C/C实现工程,聚焦多路复用网络中数据流公平共享带宽这一核心问题,涵盖发送端、接收端与路由器转发三部分代码,适合用于理解队列调…

2026/10/18 19:22:20 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →