
leetcode题解104- 二叉树的最大深度
递归函数设计:设计一个递归函数 SeaMaxDepth,接受当前节点和当前深度两个参数。 处理 null 节点:如果当前节点为 null,检查是否需要更新最大深度。 递归处理左右子节点:对于每个非 null 的节点,递归处理其左边和右边子节点,同时递增深度。 比较并更新深度:当遇到叶子节点时(两个子节点都为 null),比较当前深度与最大深度,更新较大的值。 初始调用:在主函数中调用递归函数,传入根节点和初始深度0。 递归函数设计:分为处理左子树和右子树的两个函数, 叶子节点检测:在递归中,判断当前节点是否同时没有左、右子节点,如果是,则比较并更新深度。 多线程处理:虽然函数名为顺序处理,但通过同时处理左、右子树,并在每次递归中递增深度,确保了计算的准确性。 基线情况处理:如果根节点为空,直接返回0;否则从根节点开始递归处理,初始深度为1。
发布日期:2025-04-05 04:49:32
浏览次数:8
分类:精选文章
本文共 2429 字,大约阅读时间需要 8 分钟。
给定一个二叉树,找出其最大深度。二叉树的深度定义为根节点到最远叶子节点的路径上的节点数。以下是通过递归遍历的方法来计算最大深度的详细解答。
问题描述
二叉树的深度是从根节点到最远叶子节点的最长路径上的节点数。叶子节点是指没有子节点的节点。例如,二叉树 [3,9,20,null,null,15,7] 的最长路径为 3 -> 15 -> 7,总共有三层,所以最大深度为3。
解题思路
为了计算二叉树的最大深度,可以使用递归遍历的方法。具体步骤如下:
代码实现
class Solution { private int maxDep = 0; // 用于记录最大深度的变量 void SeaMaxDepth(TreeNode p, int i) { // 如果当前节点为 null,检查是否是非叶子节点,如果是,比较深度 if (p == null) { if (i > maxDep) { maxDep = i; // 更新最大深度 } return; } // 假设节点有非 null 的左子节点,同样处理右边子节点 SeaMaxDepth(p.left, i + 1); SeaMaxDepth(p.right, i + 1); // 该函数不正确,改为以下方式: // �リー操作错误,正确方式应先进入左递归,然后处理右递归,可能需要重新写作: } // 正确实现方式: // 调用左递归,处理左边子树,并且递增深度 voidSeaMaxDepthLeft(TreeNode p, int i) { if (p == null) { if (i > maxDep) { maxDep = i; } return; } if (p.left == null && p.right == null) { // 是叶子节点 if (i > maxDep) { maxDep = i; } } else if (p.left != null) { SeaMaxDepthLeft(p.left, i + 1); } else { SeaMaxDepthLeft(p.right, i + 1); } } // 调用右递归,处理右边子树,并且递增深度 void SeaMaxDepthRight(TreeNode p, int i) { if (p == null) { if (i > maxDep) { maxDep = i; } return; } if (p.right == null && p.left == null) { // 是叶子节点 if (i > maxDep) { maxDep = i; } } else if (p.right != null) { SeaMaxDepthRight(p.right, i + 1); } else { SeaMaxDepthRight(p.left, i + 1); } } public int maxDepth(TreeNode root) { if (root == null) { return 0; } // 同时处理左子树和右子树,初始深度为1 SeaMaxDepthLeft(root, 1); return maxDep; }
代码说明
SeaMaxDepthLeft
和 SeaMaxDepthRight
,每个递归调用都会递增深度。测试案例
对于二叉树 [3,9,20,null,null,15,7],maxDepth
返回3,符合预期。因为从根节点3到叶子节点7的路径长度是3层。
总结
通过递归遍历的方法,能够高效地计算二叉树的最大深度。该方法时间复杂度为 O(n),空间复杂度为 O(h),适用于各种二叉树结构。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月24日 21时56分45秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Android 架构组件 – 让天下没有难做的 App
2021-05-16
能解决数据可视化大屏需求的3款可视化工具
2021-05-16
第01问:MySQL 一次 insert 刷几次盘?
2021-05-16
laravel server error 服务器内部错误
2021-05-18
一道简单的访问越界、栈溢出pwn解题记录
2021-05-18
响应的HTTP协议格式+常见的响应码
2021-05-18
springboot redis key乱码
2021-05-19
解决打开 json 文件中文乱码的问题
2025-03-28
计算机网络基础:PKI(公钥基础设施)
2025-03-28
乒乓球问题
2025-03-28
回溯法介绍
2025-03-28
有了Trae,人人都是程序员的时代来了
2025-03-28
CentOS 系列:CentOS 7文件系统的组成
2025-03-28
Docker部署postgresql-11以及主从配置
2025-03-28
EnvironmentNotWritableError: The current user does not have write permissions to the target environm
2025-03-28
kali安装docker(亲测有效)
2025-03-28