您的位置:首页 > 其它

判断一棵树是否为二叉排序树的两种方法

2009-10-15 22:28 288 查看
一、使用先根遍历,判断大小关系是否正确:t->lchild->value<t->value<t->rchild->value
bool Judge(PBinTree pbt)
{
PBinTreeNode pLeft, pRight;
bool bLeft = false, bRight=false, bRootl=false, bRootr=false;
if(pbt == NULL)
return true;
// 判断根节点
pLeft = pbt->left;
pRight = pbt->right;
if((pLeft && pLeft->data <= pbt->data)||pLeft==NULL)
{
bRootl = true;
}
if((pRight && pRight->data >= pbt->data)||pRight==NULL)
{
bRootr = true;
}
// 判断左右子树
bLeft = Judge(pLeft);
bRight = Judge(pRight);
// 同时满足条件才叫二叉排序树
return( bLeft && bRight && bRootl && bRootr);
}
二、如果二叉树为二叉排序树,那么中序遍历该树应该输出有序结果,每次输出的值应该比其前驱的值要大,否则不是二叉排序树
int last=0,flag=1;
int Is_BSTree(Bitree T)//判断二叉树T是否二叉排序树,是则返回1,否则返回0
{
if(T->lchild&&flag) Is_BSTree(T->lchild);
if(T->data<last) flag=0; //与其中序前驱相比较
last=T->data;
if(T->rchild&&flag) Is_BSTree(T->rchild);
return flag;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: