- 基本设计思想
对二叉排序树来说,其中序遍历序列为递增有序序列,因此,对给定的二叉树进行中序遍历,如果能保证前一个值不比后一个值大,则说明该二叉树
是一棵二叉排序树。
- 算法如下
int predt = -300; //predt小于树中的任何值,predt始终记录着当前所访问结点的前驱的值
int judBST(BTNode *bt)
{
int b1, b2;
if (bt == NULL) //空树是二叉排序树
{
return 1;
}
else
{
b1 = judBST(bt->lchild); //递归地判断左子树是否是二叉排序树
if (b1 == 0 || predt > bt->key) //左子树不是二叉排序树或者predt大于当前根结点值,则该树不是二叉排序树
return 0;
predt = bt->key; //将要访问右子树根的时候,predt记录下当前结点根结点的值
b2 = judBST(bt->rchild); //递归地判断右子树是否为二叉排序树
return b2;
}
}