這個麻煩在,對以一個結點為根的樹,左右樹都Balance,左右樹的差小于1同時滿足才行。第一種,每一個算Balance都要算到下面的height,然后復雜度O(N^2)
/** * 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) {         if(root==NULL) return true;         if(root->left==NULL)         {             if(height(root->right)>0)                return false;                            return true;                       }                  if(root->right==NULL)         {             if(height(root->left)>0)                return false;                             return true;                    }                           if(isBalanced(root->left)&&isBalanced(root->right)&&(abs(height(root->left)-height(root->right))<=1))         {             return true;         }                          return false;    }        int height(TreeNode * root)    {        if(root==NULL)            return -1;                 int a=height(root->left);        int b=height(root->right);        return (a>b)?(a+1):(b+1);    }        };第二種,基于DFS,這種用一個-1做標識,最后不是-1的就是banlance,過程中只要有不平衡就會標記-1。這樣復雜度是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) {        return dfsHeight(root)!=-1;    }            int dfsHeight(TreeNode * root)    {        if(root==NULL) return 0;                int leftHeight=dfsHeight(root->left);        if(leftHeight==-1) return -1;        int rightHeight=dfsHeight(root->right);        if(rightHeight==-1) return -1;                if(abs(leftHeight-rightHeight)>1)        return -1;        return max(leftHeight,rightHeight)+1;    }}; 
新聞熱點
疑難解答