题目描述:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
代码
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
return Judge(pRoot)==-1?false:true;
}
//当子树是平衡二叉树时返回深度否则返回-1
//若专门在每个节点求深度,容易想到,但是效率太低
int Judge(TreeNode* root)
{
if(root==NULL)
return 0;
else
{
int height_left=0,height_right=0;
height_left=Judge(root->left);
if(height_left==-1)
return -1;
height_right=Judge(root->right);
if(height_right==-1)
return -1;
if(abs(height_left-height_right)>1)
return -1;
else
return max(height_left,height_right)+1;
}
}
//绝对值
int abs(int a)
{
return a>0?a:-a;
}
//最大值
int max(int a,int b)
{
return a>b?a:b;
}
};