1. 程式人生 > 實用技巧 >LC104 二叉樹的最大深度

LC104 二叉樹的最大深度

本題給定的函式引數只有結點指標,由於無法傳入當前節點的深度,無法使用自頂向下的方法求解

遞迴解法-自底向上

class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(root == nullptr)
            return 0;
        int leftDep = maxDepth(root->left) + 1;
        int rightDep = maxDepth(root->right) + 1;
        return leftDep > rightDep ? leftDep : rightDep;
    }
};

如果引數可以多一個int型別,則可以使用自頂向下的方法,直接呼叫maxDepth(root, 0)即可

遞迴解法-自頂向下

class Solution {
private:
    int ans;
public:
    int maxDepth(TreeNode* root, int dep) {
        if(!root->left && !root->right)
            return ans > (dep + 1) ? ans : (dep + 1);
        maxDepth(root->left, dep + 1);
        maxDepth(root->right, dep + 1);
    }
};

非遞迴解法

也可以使用層次遍歷來解決這個問題,參考之前層次遍歷的寫法即可

class Solution {
public:
    int maxDepth(TreeNode* root) {
        int res = 0;
        if(root == nullptr)
            return res;
        queue<TreeNode*> level;
        level.push(root);
        while(!level.empty()){
            int size = level.size();
            for(int i = 0; i < size; i ++){
                TreeNode* nowNode = level.front();
                if(nowNode->left != nullptr) 
                    level.push(nowNode->left);
                if(nowNode->right != nullptr) 
                    level.push(nowNode->right);
                level.pop();
            }
            res++;
        }
        return res;
    }
};