一次过,但是写出来的代码并不是最高效。
class Solution {
public:
bool isBalanced(TreeNode* root) {
if (!root) return true;
if(abs(height(root->left)-height(root->right))>1) return false;
return isBalanced(root->left) && isBalanced(root->right);
}
int height(TreeNode* node){
if(!node) return 0;
return max(height(node->left),height(node->right))+1;
}
};
下面是只用了一个递归,效率为O(n) 的方法。
class Solution {
public:
int height(TreeNode *root) {
if(root == NULL)return 0;
int l = height(root->left);
if(l<0) return -1;
int r = height(root->right);
if(r<0) return -1;
if(abs(l-r)>1) return -1;
return max(l, r) + 1;
}
bool isBalanced(TreeNode* root) {
if(root == NULL)return true;
return height(root) == -1?false:true;
}
};