1

LeetCodeに問題があります。これを解決するために簡単な再帰ソリューションを使用しますが、実行時間が 170 ミリ秒と長すぎます。次に、同様の解決策を見つけましたが、これも再帰的であり、実行時間はわずか約 10 ミリ秒です。なんで?

私の解決策:

class Solution
{
public:
    bool isBalanced(TreeNode* root)
    {
        if (root == nullptr)
            return true;

        bool left = isBalanced(root->left);
        bool right = isBalanced(root->right);

        bool curr = false;
        int sub = height(root->left) - height(root->right);
        if (sub < 2 && sub > -2)
            curr = true;

        return left && right && curr;
    }

private:
    int height(TreeNode* root)
    {
        if (root == nullptr)
            return 0;

        int leftHeight = height(root->left);
        int rightHeight = height(root->right);
        return (leftHeight > rightHeight) ? (leftHeight + 1) : (rightHeight + 1);
    }
};

私が見つけた迅速な解決策:

class Solution {
public:
    bool isBalanced(TreeNode *root) {
        if (root==NULL) return true;

        int left = treeDepth(root->left); 
        int right = treeDepth(root->right);

        if (left-right>1 || left-right < -1) {
            return false;
        }
        return isBalanced(root->left) && isBalanced(root->right);
    }

    int treeDepth(TreeNode *root) {
        if (root==NULL){
            return 0;
        }

        int left=1, right=1;

        left += treeDepth(root->left);
        right += treeDepth(root->right);

        return left>right?left:right;
    }

};

ありがとうございました!

4

1 に答える 1