判断给定的二叉树是否为二叉排序树,如果是返回1,不是返回0。
思想:
二叉树是左子树<根<右子树。中序遍历是递增有序,可以通过比较当前结点与前驱关系来进行判断。
代码:
//pre为全局变量,保存当前结点中序前驱的值,初始为负无穷
KeyType pre = -32767;
int isBST(BiTree T){
int isLBST,isRBST;
if(T==NULL){
return 1;//空树为二叉排序树
} else{
isLBST = isBST(T->lchild);//判断左子树是否为平衡二叉树
if(isLBST==0||pre>=T->data){//这种情况不是二叉排序树
return 0;
}
pre=T->data;//更新前驱结点
isRBST=isBST(T->rchild);//判断右子树是否为二叉排序树
return isRBST;//这课树是否为二叉排序树可以由右子树来判断
}
}