题目是要求判断一棵树是否是平衡树,也就是要看左右子树高度的差是否绝对值小于等于1
可以通过递归来求,同样的,需要另外定义一个函数来计算深度,深度的程序之前写过,比较熟悉。
另外就是之前少写了一个条件,也就是isBalanced(root->left)&&isBalanced(root->right)这个条件,即忘记递归的时候左右也要分别满足平衡二叉树的条件。
光顾着计算深度差了····
class Solution {
public:
int myBalance(TreeNode *head){
if(head==NULL) return 0;
else return max(myBalance(head->left),myBalance(head->right))+1;
}
bool isBalanced(TreeNode* root) {
if(root==NULL) return true;
//左右都需要是平衡二叉树
if((abs(myBalance(root->left)-myBalance(root->right))<=1)&&isBalanced(root->left)&&isBalanced(root->right)) return true;
else return false;
}
};
class Solution {
public:
int myBalance(TreeNode *head){
int height=0; int l,r;
if(head==NULL) return 0;
else{
r=myBalance(head->right);
l=myBalance(head->left);
if(abs(r-l)<=1&&r!=-1&&l!=-1)
return max(r,l)+1;
else return -1; //即非平衡二叉树的情况
}
}
bool isBalanced(TreeNode* root) {
//if(root==NULL) return true;
int n=myBalance(root);
if(n<0) return false;
else return true;
}
};