核心思想是递归。首先写一个递归函数来返回树的高度,然后主函数中递归调用该函数比较左右子树的高度。
没有什么特别需要注意的点,就是时间复杂度和空间复杂度有点高。但是也没有想象的那么高。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(!pRoot || (!pRoot->left && !pRoot->right)){
return true;
}
if(!pRoot->left){
if(getHeight(pRoot->right, 0) > 1){
return false;
}
return IsBalanced_Solution(pRoot->right);
}
if(!pRoot->right){
if(getHeight(pRoot->left, 0) > 1){
return false;
}
return IsBalanced_Solution(pRoot->left);
}
if(abs(getHeight(pRoot->left, 0) - getHeight(pRoot->right, 0)) > 1){
return false;
}
return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right);
}
int getHeight(TreeNode* p, int level){
level++;
if(!p->left && !p->right){
return level;
}
else if(!p->left){
return getHeight(p->right, level);
}
else if(!p->right){
return getHeight(p->left,level);
}
else{
if(getHeight(p->left,level) > getHeight(p->right, level)){
return getHeight(p->left,level);
}
else{
return getHeight(p->right,level);
}
}
}
};