【正确答案】
【答案解析】判定二又树是否为二叉排序树是建立在二叉树中序遍历的基础上,在遍历中附设一指针pre指向树中当前访问结点的中序直接前驱,每访问一个结点就比较前驱结点pre与该结点是否有序。若遍历结束后各结点和其中序直接前驱结点均满足有序,则此二叉树即为二叉排序树,否则不是二叉排序树。
void BisortTree(Bitree*T,Bitree* pre,int & flag)
/*初始时pre=NULL,flag=1,若结束时flag=1。则此二叉树为排序二叉树*/
{
if(T!=NULL) && flag==1)
{
BisortTree(T->lchild,pre,flag); //遍历左子树
if(pre==NULL)//访问中序序列的第一个结点时,不需要比较
{
flag=1;
pre=T;
}
else//比较T与中序直接前驱pre的大小
{
if(pre->data<T->data)//pre与T有序
{
flag=1;
pre=T;
}
else//pre与T无序
flag=0;
}
BitsortTree(T->rchild,pre,flag); //遍历右子树
}
}