class Solution {
public:int maxDepth(TreeNode* root) {if (root == nullptr) {return 0;}int l_depth = maxDepth(root->left);int r_depth = maxDepth(root->right);return max(l_depth, r_depth) + 1;}
};
代码作用
该函数通过递归计算二叉树的最大深度(从根节点到叶子节点的最长路径上的节点数)。
运行步骤示例
假设有以下二叉树:
1
/ \
2 3
/ \
4 5
函数调用顺序
1. 初始调用:
maxDepth(root) // root 节点值为 1
2. 检查 root 是否为 nullptr:
• root 为节点 1,非空,继续。
3. 递归计算左子树深度:
l_depth = maxDepth(root->left) // root->left 是节点 2
4. 对节点 2 再次递归:
• root 为节点 2,非空,继续。
• 递归计算左子树深度:
l_depth = maxDepth(root->left) // root->left 是节点 4
• root 为节点 4,非空,继续。
• 递归计算左、右子树深度:
maxDepth(root->left) // nullptr,返回 0
maxDepth(root->right) // nullptr,返回 0
• 返回值为:
max(0, 0) + 1 = 1
• 回到节点 2,计算右子树深度:
r_depth = maxDepth(root->right) // root->right 是节点 5
• 类似节点 4,返回深度为 1。
• 返回节点 2 的深度:
max(1, 1) + 1 = 2
5. 回到节点 1,计算右子树深度:
r_depth = maxDepth(root->right) // root->right 是节点 3
• 节点 3 无子节点,直接返回:
max(0, 0) + 1 = 1
6. 最终计算根节点的深度:
max(2, 1) + 1 = 3
执行流程总结
• 从根节点递归到叶子节点,再逐层返回深度。
• 每次返回的是左右子树最大深度 +1。
最终结果
二叉树的最大深度为 3。