您的位置:首页 > 其它

判断一颗二叉树是否是平衡二叉树

2012-07-25 01:10 483 查看
方法一,参考 /article/9149058.html

template<typename T>

int DepthTree(BSTreeNode<T> *pbs)

{

if (pbs==NULL)

return 0;

else

{

int leftLength=DepthTree(pbs->left);

int rigthLength=DepthTree(pbs->right);

return 1+(leftLength>rigthLength ? leftLength:rigthLength);

}

}

template<typename T>

bool isBalanceTree(BSTreeNode<T> *pbs)

{

if (pbs==NULL)

{

return true;

}

int depthLeft=DepthTree(pbs->left);

int depthRight=DepthTree(pbs->right);

if (abs(depthLeft-depthRight)>1)

return false;

else

return isBalanceTree(pbs->left) && isBalanceTree(pbs->right);

}

方法一用的是线序遍历的思想, 缺点是,重复计算了多次子树的深度

方法二用的是后序遍历的思想,免去了对子树的重复计算

template<typename T>
bool isBalanceTree(BSTreeNode<T> *pbs, int &curLen)
{
if (pbs==NULL)
{
return true;
}

int leftLen;
int rightLen;
bool isLeftBalance;
bool isRightBalance;

leftLen = rightLen = 0;
isLeftBalance = isRightBalance = false;

isLeftBalance  = isBalanceTree(pbs->left, leftLen);
isRightBalance = isBalanceTree(pbs->right, rightLen);

curLen =  leftLen >= rightLen ?  leftLen+1 : rightLen+1;

if (isLeftBalance == true && isRightBalance == true)
{
if (abs(depthLeft-depthRight) <= 1)
{
return true;
}
}
return false;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: