编写一个判别给定二叉树是否为二叉排序树的算法,假设二叉树是用左右链方式存储。
#include<stdio.h>
#include<stdlib.h>
#define MIN -256;
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild; //左右孩子指针
}BiTNode, *BiTree;
int prev = MIN;
int flag = true;
bool InOrderTraverse(BiTree T)
{
if (T->lchild != NULL && flag)
InOrderTraverse(T->lchild);
if (T->data<prev)
flag = false;
prev = T->data;
if (T->rchild != NULL && flag)
InOrderTraverse(T->rchild);
return flag;
}
void CreateBiTree(BiTree * T) //二叉树的建立
{
TElemType data;
scanf("%d", &data);
if (data == -1)
*T = NULL;
else
*T = (BiTree)malloc(sizeof(BiTNode));
if (!*T)
return;
else
{
(*T)->data = data;
CreateBiTree(&(*T)->lchild); //构造左子树
CreateBiTree(&(*T)->rchild); //构造右子树
}
}
int main()
{