二叉排序树的判断
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
char Data;
struct Node* LChild;
struct Node* RChild; //先序遍历创建
}BiTNode,*PBiTNode;
int flag=1;
void CreateBiTree(PBiTNode *bt) //这个直接递归就好了,不用循环
{
int ch;
scanf("%d",&ch);
if(ch==-1) //一个左括号就新创建一个左子树。
{
(*bt)=NULL;//这个bt是新的子树的结点啊,为空是自然的
}
else
{
(*bt)=(PBiTNode)malloc(sizeof(BiTNode));
(*bt)->Data=ch;
CreateBiTree(&((*bt)->LChild));
CreateBiTree(&((*bt)->RChild)); //(*bt)一定要打括号
}
return;
}
void Is_BSTree(PBiTNode bt) //左子树回溯后,下一步一定是进入右子树
{
if(bt!=NULL)
{
if(flag&&bt->LChild)
{
if(bt->LChild->Data>=bt->Data)
{
flag=0;
return;
}
else
Is_BSTree(bt->LChild);
}
if(flag&&bt->RChild)
{
if(bt->RChild->Data<bt->Data)
{
flag=0;
return;
}
else
Is_BSTree(bt->RChild);
}
}
}
int main()
{
PBiTNode bt;
CreateBiTree(&bt);
if(flag==1)
printf("yes\n");
else
printf("no\n");
return 0;
}