【二叉树】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/11/3 0:06:58 阅读更多 →
传统商协会管理难?一套商协会管理系统完整落地方案

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

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

2026/11/11 5:02:29 阅读更多 →
从 SEGW 元数据到真正可运行的 OData 服务,彻底搞懂 Runtime Artifacts 的生成机制

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

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

2026/11/7 16:54:23 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/14 5:13:29 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/14 5:13:29 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/14 5:13:29 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/14 5:13:29 阅读更多 →

日新闻

周新闻

月新闻