判断一棵树是不是BST

坑点:不能通过左大于根或右小于根直接判定;

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);
}
posted @ 2021-03-17 20:12  vincent's_blog  阅读(60)  评论(0)    收藏  举报