音乐
音乐
暂未播放
0:00/0:00
暂无歌词
LeetCode | 二叉树的最大深度
458 字
2 分钟
LeetCode | 二叉树的最大深度
分类:二叉树 / 深度优先搜索 / 递归
题目#
给定一棵二叉树的根节点 root,返回这棵树的最大深度。
最大深度指的是:从根节点到最远叶子节点经过的节点个数。
示例:
1 32 / \3 9 204 / \5 15 76
7输入:root = [3,9,20,null,null,15,7]8输出:3讲解#
如果对二叉树、根节点、左子树、右子树这些概念还不熟,可以先看 二叉树的中序遍历 里的基础概念。
当前树的最大深度 = max(左子树最大深度, 右子树最大深度) + 1
这个递归可以理解成:函数会不断往下找左子树和右子树,一直找到空节点。找到空节点时,说明这里已经没有节点了,所以返回 0。
然后结果会一层一层往上返回。每往上回到一个真实节点,就在左右子树最大深度的基础上 + 1,表示把当前这个节点也算进去。最后一直返回到最开始的根节点,就得到了整棵树的最大深度。
复杂度#
- 递归法:
- 时间复杂度:
O(n) - 空间复杂度:
O(n)
- 时间复杂度:
每个节点都会被访问一次,所以时间复杂度是 O(n)。递归会使用系统调用栈,最坏情况下树退化成链表,递归深度是 n,所以空间复杂度是 O(n)。
代码#
源码#
1class Solution:2 def maxDepth(self, root: "TreeNode") -> int:3 if not root:4 return 05
6 left_height = self.maxDepth(root.left)7 right_height = self.maxDepth(root.right)8 return max(left_height, right_height) + 1测试#
1from src.python._104_Maximum_Depth_of_Binary_Tree import Solution2
3
4class TreeNode:5 def __init__(self, val=0, left=None, right=None):6 self.val = val7 self.left = left8 self.right = right9
10
11sol = Solution()12
13root = TreeNode(3)14root.left = TreeNode(9)15root.right = TreeNode(20)16root.right.left = TreeNode(15)17root.right.right = TreeNode(7)18assert sol.maxDepth(root) == 319
20assert sol.maxDepth(None) == 021assert sol.maxDepth(TreeNode(1)) == 122
23root = TreeNode(1)24root.right = TreeNode(2)25assert sol.maxDepth(root) == 226
27print("PASS")参考资料#
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
LeetCode | 二叉树的最大深度
https://leetcode.cn/problems/maximum-depth-of-binary-tree/最后更新于 2026-08-03
部分内容可能已过时
相关文章智能推荐
1
LeetCode | 二叉树的中序遍历
LeetCodeLeetCode 二叉树的中序遍历题解:使用递归法和迭代栈法完成左、根、右遍历。
2
LeetCode | 有效的括号
LeetCodeLeetCode 有效的括号题解:使用栈解决括号匹配问题,字典映射右括号到左括号,时间复杂度 O(n)。
3
LeetCode | 盛最多水的容器
LeetCodeLeetCode 盛最多水的容器题解:使用双指针从两端向中间移动,计算能够装下的最大水量。
4
LeetCode | 两数相加
LeetCodeLeetCode 两数相加题解:模拟竖式逐位相加,dummy 虚拟头节点串联结果链表,维护 carry 进位。
5
LeetCode | 搜索二维矩阵
LeetCodeLeetCode 搜索二维矩阵题解:把矩阵看作一维数组做二分,或者先定位行再二分查找。
随机文章随机推荐
暂无随机文章
评论区
分享你的想法,与大家交流讨论
--
总访问量
--
访客数
公告
音乐
音乐
暂未播放
0:00/0:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0 天
最后活动
0 天前
最新动态



