104. 二叉树的最大深度
3 min
题目
解法:递归分治
思路
递归分治,利用二叉树的后序遍历思想,分别计算左右子树的深度并取最大值。
递归的正确性基于数学归纳法:当树为空时深度为0;当树非空时,其深度等于左右子树深度的最大值加1(根节点自身)。这种自底向上的计算方式确保了每个节点的深度都被正确计算,最终得到整棵树的深度。
- Step 1: 如果当前节点为空,返回0
- Step 2: 递归计算左子树的深度
- Step 3: 递归计算右子树的深度
- Step 4: 返回左右子树深度的最大值加1
复杂度
- 时间复杂度: ,每个节点仅访问一次,时间开销与节点数成线性关系。
- 空间复杂度: ,递归栈空间取决于树的高度 ,最坏情况下(链状树)为 。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == nullptr){
return 0;
}
return max(maxDepth(root->right),maxDepth(root->left))+1;
}
};