1. 理解二叉树的最大深度问题
在开始讨论具体解法之前,我们需要明确几个基本概念。二叉树的最大深度,也称为二叉树的高度,指的是从根节点到最远叶子节点的最长路径上的节点数。这个概念在数据结构中非常重要,因为它直接关系到二叉树的平衡性和各种操作的效率。
举个例子,考虑下面这个简单的二叉树:
code复制 3
/ \
9 20
/ \
15 7
这棵树的最大深度是3,因为从根节点3到叶子节点15或7的路径都包含3个节点(3→20→15或3→20→7)。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 递归解法解析
2.1 递归的基本思路
递归是解决树形结构问题的天然工具,因为树本身就是递归定义的数据结构。对于二叉树的最大深度问题,我们可以这样思考:
- 如果树为空(即根节点为null),那么深度自然为0
- 否则,树的深度等于其左右子树中较大的深度加1(加1是因为要算上当前节点)
这个思路非常直观,也符合我们对树深度的直观理解。让我们仔细看看提供的代码:
java复制public int maxDepth(TreeNode root) {
if(root == null) {
return 0;
}
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
2.2 代码逐行解析
-
基线条件:
if(root == null) return 0;- 这是递归的终止条件,当遇到空节点时返回深度0
- 这处理了空树的情况,也确保了递归能够正常终止
-
递归调用:
Math.max(maxDepth(root.left), maxDepth(root.right)) + 1- 分别计算左子树和右子树的深度
- 取两者中的较大值
- 加1表示当前节点的深度贡献
2.3 递归的执行过程
让我们通过一个简单的例子来跟踪递归的执行过程。考虑以下二叉树:
code复制 1
/ \
2 3
/
4
执行过程如下:
- 调用maxDepth(1)
- 计算maxDepth(2)和maxDepth(3)
- 计
