LongDz 的数字文墨提案

104. 二叉树的最大深度

3 min

题目

二叉树的最大深度 简单

解法:递归分治

思路

递归分治,利用二叉树的后序遍历思想,分别计算左右子树的深度并取最大值。

递归的正确性基于数学归纳法:当树为空时深度为0;当树非空时,其深度等于左右子树深度的最大值加1(根节点自身)。这种自底向上的计算方式确保了每个节点的深度都被正确计算,最终得到整棵树的深度。

  • Step 1: 如果当前节点为空,返回0
  • Step 2: 递归计算左子树的深度
  • Step 3: 递归计算右子树的深度
  • Step 4: 返回左右子树深度的最大值加1

复杂度

  • 时间复杂度: O(n)O(n),每个节点仅访问一次,时间开销与节点数成线性关系。
  • 空间复杂度: O(h)O(h),递归栈空间取决于树的高度 hh,最坏情况下(链状树)为 O(n)O(n)

代码

/**
 * 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;
    }
};