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; }