class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot==NULL) return true;
int left = getDepth(pRoot->left); //pRoot是跟节点.
int right = getDepth(pRoot->right);
int dif = left - right;
if(dif < -1 || dif > 1)
return false;
else
return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right); //递归(循环).
}
int getDepth(TreeNode *root){
if(!root) return 0;
int left = getDepth(root->left);
int right = getDepth(root->right);
return left > right ? left + 1 : right + 1;
}
};
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(helper(pRoot) < 0) return false;
return true;
}
private:
int helper(TreeNode* node){
if(node == NULL) return 0;
int ld = helper(node->left);
if(ld == -1) return -1; //若左边已经不是平衡二叉树了,那就直接返回,没必要搜索右边了
int rd = helper(node->right);
if(rd == -1 || abs(ld-rd) > 1) return -1; //-1代表:不是平衡二叉树
return max(ld, rd)+1;
}
};