错误思想:若一棵非空的二叉树其左、右子树均为二叉排序树,且左子树的根小于根结点的值,根结点的值不大于右子树的根的值,则是二叉排序树。
正确算法
Int flag=0,last=0; //last是全局变量,用来记录前驱结点值,只要每个结点都比前驱大就行
Int Is_BSTree(Bitree T) //判断二叉树是否为二叉排序树,是则返回1,否则返回0
{
if(T->lchild&&flag)
Is_BSTree(T->lchild);
if(T->data<last)
flag=0; //与其中序前驱相比较,flag=0表示当前节点比直接前驱小,则立即返回
last=T->data;
if(T->rchild&&flag)
Is_BSTree(T->rchild);
return flag;
}