问题 问答题

编写判定给定的二叉树是否是二叉排序树的函数。

答案

参考答案:

解析:判定二又树是否为二叉排序树是建立在二叉树中序遍历的基础上,在遍历中附设一指针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); //遍历右子树 }}

单项选择题
选择题