坑点:不能通过左大于根或右小于根直接判定;
Status IsBSTree(BiTree t)
/* 判别给定二叉树t是否为二叉排序树。*/
/* 若是,则返回TRUE,否则FALSE */
{
BiTree p;
if(!t || !t->lchild&&!t->rchild) return TRUE; //
if(t->lchild)
{
p=t->lchild;
while(p->rchild) p=p->rchild;// 找左子树最右的 ,也是左子树最大的
if(t->data.key < p->data.key) return FALSE; //
}
if(t->rchild)
{
p=t->rchild;
while(p->lchild) p=p->lchild;// 找右子树最左的 ,也是右子树最小的
if(t->data.key > p->data.key) return FALSE; //
}
return IsBSTree(t->lchild)&&IsBSTree(t->rchild);
}