9.31④ 试写一个判别给定二叉树是否为二叉排序树
的算法,设此二叉树以二叉链表作存储结构。且树中
结点的关键字均不同。
实现下列函数:
Status IsBSTree(BiTree t);
/* 判别给定二叉树t是否为二叉排序树。*/
/* 若是,则返回TRUE,否则FALSE */
二叉树的类型BiTree定义如下:
typedef struct {
KeyType key;
... ... // 其他数据域
} ElemType;
typedef struct BiTNode {
ElemType data;
BiTNode *lchild,*rchild;
/* 判别给定二叉树t是否为二叉排序树。*/
/* 若是,则返回TRUE,否则FALSE */
{
if(t)
{
if(t->lchild&&t->lchild->data.key>=t->data.key)
return FALSE;
if(t->rchild&&t->rchild->data.key<=t->data.key)
return FALSE;
if(IsBSTree(t->lchild))
return IsBSTree(t->rchild);
return FALSE;
}
return TRUE;
}
的算法,设此二叉树以二叉链表作存储结构。且树中
结点的关键字均不同。
实现下列函数:
Status IsBSTree(BiTree t);
/* 判别给定二叉树t是否为二叉排序树。*/
/* 若是,则返回TRUE,否则FALSE */
二叉树的类型BiTree定义如下:
typedef struct {
KeyType key;
... ... // 其他数据域
} ElemType;
typedef struct BiTNode {
ElemType data;
BiTNode *lchild,*rchild;
}BiTNode, *BiTree;
/* 判别给定二叉树t是否为二叉排序树。*/
/* 若是,则返回TRUE,否则FALSE */
{
if(t)
{
if(t->lchild&&t->lchild->data.key>=t->data.key)
return FALSE;
if(t->rchild&&t->rchild->data.key<=t->data.key)
return FALSE;
if(IsBSTree(t->lchild))
return IsBSTree(t->rchild);
return FALSE;
}
return TRUE;
}