判断一棵树是否为二叉排序树的两种方法

1、使用先根遍历,判断大小关系是否正确:t->lchild->value<t->value<t->rchild->value
bool Judge(PBinTree pbt)
{
     PBinTreeNode   pLeft, pRight;
     bool    bLeft = false, bRight=false, bRootl=false, bRootr=false;
     if(pbt == NULL)
         return true;
     // 判断根节点
     pLeft = pbt->left;
     pRight = pbt->right;
     if((pLeft && pLeft->data <= pbt->data)||pLeft==NULL)
     {
          bRootl = true;
     }
     if((pRight && pRight->data >= pbt->data)||pRight==NULL)
     {
          bRootr = true;
     }
     // 判断左右子树
     bLeft = Judge(pLeft);
     bRight = Judge(pRight);
     // 同时知足条件才叫二叉排序树
     return( bLeft && bRight && bRootl && bRootr);
}
2、若是二叉树为二叉排序树,那么中序遍历该树应该输出有序结果,每次输出的值应该比其前驱的值要大,不然不是二叉排序树
  int   last=0,flag=1;       int   Is_BSTree(Bitree   T)//判断二叉树T是否二叉排序树,是则返回1,不然返回0     {         if(T->lchild&&flag)   Is_BSTree(T->lchild);         if(T->data<last)   flag=0;   //与其中序前驱相比较         last=T->data;         if(T->rchild&&flag)   Is_BSTree(T->rchild);         return   flag;     }
相关文章
相关标签/搜索