题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
平衡二叉树的左右子树高度差只能是1,0,-1,如果绝对值大于1,则不是AVL树。
所以先递归获取左右子树的高度,如果左右子树的差的绝对值大于1,则返回false。
代码如下:
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot==NULL)
{
return true;
}
bool is =true;
GetHight(pRoot,is);
return is;
}
int GetHight(TreeNode *root,bool &is)
{
if(root==NULL||is==false)//如果发现不是AVL树,则控制不再进行新的递归
{
return 0;
}
int leftHight=GetHight(root->left,is);
int rightHight=GetHight(root->right,is);
if(abs(leftHight-rightHight)>1)
is=false;
return max(leftHight,rightHight)+1;
}
};