news 2026/2/27 21:42:37

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/27 12:14:23

Python+django的数据结构课程知识库在线答疑系统代码

目录数据结构课程知识库在线答疑系统&#xff08;PythonDjango&#xff09;摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;数据结构课程知识库在线答疑系统&#xff08;PythonDjango&am…

作者头像 李华
网站建设 2026/2/27 18:06:32

Python+django的企业员工考勤加班人事培训管理系统设计与实现可视化

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 针对现代企业管理的数字化需求&#xff0c;设计并实现了一套基于PythonDjango框架的企业员工考勤加班人事培训管理系统。系统采…

作者头像 李华
网站建设 2026/2/28 6:19:59

Python+django的果蔬销售平台

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

作者头像 李华
网站建设 2026/2/20 19:12:11

无人接住的呐喊:自由接案者的孤岛效应与破局之道

无人接住的呐喊&#xff1a;自由接案者的孤岛效应与破局之道序章&#xff1a;当自由变成一座孤岛清晨七点&#xff0c;李薇又一次在未读邮件的提示音中醒来。这是她成为自由接案者的第三年&#xff0c;也是收入连续下滑的第四个月。窗外阳光明媚&#xff0c;但她感觉仿佛被困在…

作者头像 李华