day141—递归—二叉树的最大深度(LeetCode-104)

题目描述

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

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

示例 1:

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

示例 2:

输入:root = [1,null,2]输出:2

提示:

  • 树中节点的数量在[0, 104]区间内。
  • -100 <= Node.val <= 100

解决方案(一):

这段代码的核心功能是计算二叉树的最大深度(即从根节点到最远叶子节点的路径上的节点总数),采用「递归 + 分治」的后序遍历思路实现,时间复杂度O(n)n为二叉树节点数),空间复杂度O(h)h为树的高度,递归栈开销),是该问题的经典最优解法。

核心逻辑

代码利用递归的 “分治思想”,将求整棵树的最大深度拆解为求左右子树的最大深度,再合并结果:

  1. 边界条件:若根节点root为空(空树 / 空节点),直接返回深度0
  2. 递归拆解:分别递归计算左子树的最大深度left_depth和右子树的最大深度right_depth
  3. 合并结果:当前节点所在子树的深度 = 左右子树深度的最大值 + 1(加1是因为要包含当前节点本身),返回该值。

总结

  1. 核心思路:分治递归,将整棵树的深度问题拆解为左右子树的子问题,遵循「后序遍历」逻辑(先算左右子树,再算当前节点);
  2. 关键公式:当前节点深度 = max(左子树深度, 右子树深度) + 1,空节点深度为0
  3. 效率特点:每个节点仅遍历一次,时间O(n);递归栈空间取决于树的高度(平衡树为O(log n),退化为链表时为O(n))。

函数源码(一):

/** * 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 maxDepth(TreeNode* root) { if(!root) return 0; int left_depth=maxDepth(root->left); int right_depth=maxDepth(root->right); return max(left_depth,right_depth)+1; } };

解决方案(二):

这段代码的核心功能是计算二叉树的最大深度(根节点到最远叶子节点的节点总数),采用「递归 + 前序遍历(深度优先遍历)」的思路,通过全局变量记录遍历过程中达到的最大深度,时间复杂度O(n)n为节点数),空间复杂度O(h)h为树的高度,递归栈开销),是该问题的另一种经典解法。

核心逻辑

代码通过 “遍历每个节点并统计深度” 的方式,而非分治思想,核心是用全局变量追踪遍历过程中的最大深度:

  1. 全局变量初始化:定义ans并初始化为 0,用于保存最终的最大深度;
  2. 递归辅助函数遍历:定义f函数,参数为当前节点node和当前遍历深度depth
    • 边界条件:若当前节点为空,直接返回(无节点可统计);
    • 深度更新:当前节点非空时,深度+1(包含当前节点),并更新ans为 “当前深度” 和 “历史最大深度” 的较大值;
    • 递归遍历:依次递归遍历当前节点的左子树和右子树,传递更新后的深度值;
  3. 主函数触发遍历:调用辅助函数f(root, 0)(初始深度为 0,未访问任何节点),最终返回ans即为二叉树的最大深度。

总结

  1. 核心思路:前序遍历(先处理当前节点,再遍历左右子树),遍历过程中逐节点统计深度,用全局变量记录最大值;
  2. 解法特点:区别于 “后序分治(先算左右子树深度再合并)”,这是「遍历统计」思路,更直观体现 “深度遍历” 的过程;
  3. 效率特点:每个节点仅遍历一次,时间O(n),递归栈空间取决于树的高度,与分治解法效率完全一致。

函数源码(二):

/** * 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 ans=0; void f(TreeNode* node, int depth){ if(!node) return; depth+=1; ans=max(depth,ans); f(node->left,depth); f(node->right,depth); } int maxDepth(TreeNode* root) { f(root,0); return ans; } };

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

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

相关文章

STM32-270-多功能水质监测系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

STM32-270-多功能水质监测系统(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 产品功能描述&#xff1a; 本系统由STM32F103C8T6单片机核心板、TFT1.44寸彩屏液晶显示电路、&#xff08;无线蓝牙/无线WIFI/无线视频监控模块-可…

基于图像模糊度统计和盲卷积滤波的图像去模糊算法matlab仿真

1.前言 基于图像模糊度统计和盲卷积滤波的图像去模糊算法,结合了对图像模糊程度的量化评估和无需预先知道模糊核的图像恢复技术,能够在一定程度上自动分析图像的模糊特性并进行有效复原。 2.算法运行效果图预览 (完整…

Python+django的同城社区篮球队管理系统 体育运动篮球赛事预约系统

目录同城社区篮球队管理系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;同城社区篮球队管理系统摘要 该系统基于PythonDjango框架开发&#xff0c;旨在为社区篮球爱好者提供便捷的球…

Python+django的图书资料借阅信息管理系统的设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着信息化时代的快速发展&#xff0c;图书资料的管理效率成为图书馆和各类机构关注的重点。传统的纸质记录方式效率低下且容易…

HTML打包EXE工具2.2.0版本重磅更新 - 2026年最新版本稳定性大幅提升

HTML打包EXE工具迎来2026年首个重要版本更新!2.2.0版本专注于稳定性提升和用户体验优化,修复了多个影响使用的关键问题,新增清理本地激活数据功能,为开发者提供更可靠的HTML转EXE解决方案。 软件官网 HTML打包EXE工…

STM32-S273-对讲机频道可设+语音通话+一对多+状态显示+铃音提醒+按键设置+OLED屏+声光提醒(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

STM32-S273-对讲机频道可设语音通话一对多状态显示铃音提醒按键设置OLED屏声光提醒 STM32-S273N(硬件操作详细): 产品功能描述&#xff1a; 本系统由STM32F103C8T6单片机核心板、OLED屏、&#xff08;无线蓝牙/无线WIFI/无线视频监控/联网云平台模块-可选&#xff09;、对讲机模…

STM32智能家居光照温度可燃气检测系统32-907(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

STM32智能家居光照温度可燃气检测系统32-907(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 产品功能描述&#xff1a; 本系统由STM32F103C8T6单片机核心板、TFT彩屏(1.44寸屏按键/3.5寸触摸屏/7.0寸触摸屏)、无线选择&#x…

基于深度学习的PCB板元器件检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)

本文介绍了一个基于YOLO算法的PCB板元器件检测系统,该系统可识别22种元器件,支持图片、视频、批量文件和摄像头实时检测。系统采用Python3.10开发,前端使用PyQt5,数据库为SQLite,集成了YOLOv5/v8/v11/v12等多种模…

51单片机心率计脉搏测量仪表体温检测73(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

51单片机心率计脉搏测量仪表体温检测73(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码51单片机心率计脉搏测量仪表体温检测73(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码…

Python+django的数字化高校宿舍报修出入登记调换宿舍管理系统的实现

目录数字化高校宿舍管理系统实现摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;数字化高校宿舍管理系统实现摘要 该系统基于PythonDjango框架开发&#xff0c;旨在解决传统高校宿舍管理…

【数字信号调制】基于matlab AWGN信道BPSK和QPSK仿真(含BER分析)【含Matlab源码 14987期】含报告

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

未命名鲜花

近期心情不好,阅读了大量多头鲜花以及多头在鲜花中推荐阅读的文章(一篇谈一部乒乓球的番带来的启示的文章,以及一些知乎上 Anlin 写的日寄),有很多的感触与自己的思考,因此也来尝试自己写一点。 感觉鲜花写什么确…

竞业协议

竞业协议 可以查看这个文章 https://www.zhihu.com/question/526853422 核心思想: 竞业补偿不是“补贴”,而是企业为限制员工竞争行为所支付的对价。 企业当然可以选择不再支付,但一旦停止支付,竞业限制的基础即随…

芯谷科技—D9420A:高性能同步降压稳压器,助力高效电源设计 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Python+django的果蔬销售平台

目录果蔬销售平台摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;果蔬销售平台摘要 该平台基于PythonDjango框架开发&#xff0c;旨在为消费者和供应商提供高效的果蔬在线交易服务。系统…

# 竞业协议

竞业协议 可以查看这个文章 https://www.zhihu.com/question/526853422 核心思想: 竞业补偿不是“补贴”,而是企业为限制员工竞争行为所支付的对价。 企业当然可以选择不再支付,但一旦停止支付,竞业限制的基础即随…

基于YOLOv8的建筑物管道渗漏智能识别系统 混凝土墙体渗透检测识别数据集 红外墙体渗漏识别数据集 红外管道漏水识别第10411期

往期热门主题 主题搜两字"关键词"直达 代码数据获取&#xff1a; 获取方式&#xff1a;***文章底部卡片扫码获取***. 覆盖了YOLO相关项目、OpenCV项目、CNN项目等所有类别&#xff0c; 覆盖各类项目场景&#xff1a;项目名称项目名称基于YOLOv8 智慧农业作物长势监测…

CompletableFuture处理超时

在当前的 BatchProcessingService 类中,所有异步任务均通过 CompletableFuture.supplyAsync() 提交,并使用了自定义的 taskExecutor 执行器。但目前 没有实现超时控制,即如果某个任务长时间不完成,也不会中断或返回…

Python+django的农贸市场摊位商户管理信息系统设计与实现

目录农贸市场摊位商户管理信息系统设计与实现摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;农贸市场摊位商户管理信息系统设计与实现摘要 该系统基于PythonDjango框架开发&#xff0c…