如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树
第一种解法。
缺点:递归次数多,效率比较低。
bool isBalance(Tree* pNode) //
{
if(!pNode)
return true;
int left = TreeDeep(pNode->left);
int right = TreeDeep(pNode->right);
int temp = left - right;
if(temp > 1 || temp < -1)
return false;
return isBalance(pNode->left) && isBalance(pNode->right);
}
int TreeDeep(Tree* pNode) //求节点的深度
{
if(!pNode)
return 0;
int left = TreeDeep(pNode->left);
int right = TreeDeep(pNode->right);
return right > left ? (right+1) : (left +1);
}
第二种解法:
bool isBalance(Tree* pNode, int *deep)
{
if(!pNode)
{
*deep = 0;
return true;
}
int left,right;
if (isBalance(pNode->left,&left)
&& isBalance(pNode->right, &right))
{
int temp = left - right;
if(temp <= 1 && temp >=-1)
{
*deep = 1+ (left > right ? left : right);
return true;
}
}
return false;
}