LeetCode | 二叉树的最大深度

458 字
2 分钟
LeetCode | 二叉树的最大深度

分类:二叉树 / 深度优先搜索 / 递归

题目#

给定一棵二叉树的根节点 root,返回这棵树的最大深度。

最大深度指的是:从根节点到最远叶子节点经过的节点个数。

示例:

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

讲解#

如果对二叉树、根节点、左子树、右子树这些概念还不熟,可以先看 二叉树的中序遍历 里的基础概念。

当前树的最大深度 = max(左子树最大深度, 右子树最大深度) + 1

这个递归可以理解成:函数会不断往下找左子树和右子树,一直找到空节点。找到空节点时,说明这里已经没有节点了,所以返回 0

然后结果会一层一层往上返回。每往上回到一个真实节点,就在左右子树最大深度的基础上 + 1,表示把当前这个节点也算进去。最后一直返回到最开始的根节点,就得到了整棵树的最大深度。

复杂度#

  • 递归法:
    • 时间复杂度:O(n)
    • 空间复杂度:O(n)

每个节点都会被访问一次,所以时间复杂度是 O(n)。递归会使用系统调用栈,最坏情况下树退化成链表,递归深度是 n,所以空间复杂度是 O(n)

代码#

源码#

class Solution:
def maxDepth(self, root: "TreeNode") -> int:
if not root:
return 0
left_height = self.maxDepth(root.left)
right_height = self.maxDepth(root.right)
return max(left_height, right_height) + 1

测试#

from src.python._104_Maximum_Depth_of_Binary_Tree import Solution
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
sol = Solution()
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)
assert sol.maxDepth(root) == 3
assert sol.maxDepth(None) == 0
assert sol.maxDepth(TreeNode(1)) == 1
root = TreeNode(1)
root.right = TreeNode(2)
assert sol.maxDepth(root) == 2
print("PASS")

参考资料#

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

LeetCode | 二叉树的最大深度
https://leetcode.cn/problems/maximum-depth-of-binary-tree/
作者
平昊阳
发布于
2026-08-03
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
平昊阳
乘长风,破巨浪, 展鸿图于未央!
--
总访问量
--
访客数
公告
欢迎来到我的个人博客!欢迎关注交流吖!
更多相关公告,见
社交-留言」。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0
最后活动
0 天前

文章目录