LeetCode 面試題55 - II. 平衡二叉樹(樹的高度的預處理、DFS)

在這篇博客平衡二叉樹裏,時間複雜爲O(nn)O(n*n)
原因是,每一次計算高度時,都要去遍歷樹。
如果用O(n)O(n)的時間去預處理,然後直接使用就好了。
下面是改進版。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isBalanced(TreeNode* root) {
        getHeight(root);
        return dfs(root);    
    }
    bool dfs(TreeNode *root){
        if(!root){
            return true;
        }
        int lh = root->left?root->left->val:0;
        int rh = root->right?root->right->val:0;
        if(abs(lh-rh)>1) return false;
        if(!dfs(root->left) || !dfs(root->right)) return false;
        return true;
    }
    int getHeight(TreeNode *root){
        if(!root) return 0;
        return root->val=1+max(getHeight(root->left),getHeight(root->right));
    }

};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章