题目描述:
1.空树的时候,输出yes。
2.左子树的值<根节点的值<右子树的值。
AC代码:
#include <iostream>
using namespace std;
typedef struct bstnode
{
int elem;
struct bstnode *lchild,*rchild;
}*bstree;
//先序,创建二叉排序树
bstree creat_bstree(bstree t)
{
int data;
cin>>data;
if(data==-1)
return NULL;
else
{
t=new struct bstnode;
t->elem=data;
t->lchild=creat_bstree(t->lchild);
t->rchild=creat_bstree(t->rchild);
return t;
}
}
//判别是否是二叉排序树
int isbstree(bstree t)
{
if(!t)
return 1;
else if(t->lchild&&t->rchild)
{
if(t->lchild->elem>t->elem || t->rchild->elem<t->elem)
return 0;
else
return (isbstree(t->lchild)&&isbstree(t->rchild));
}
else if(t->lchild)
{
if(t->lchild->elem > t->elem )
return 0;
else
return (isbstree(t->lchild));
}
else if(t->rchild)
{
if(t->rchild->elem < t->elem )
return 0;
else
return (isbstree(t->rchild));
}
return 1;
}
int main()
{
bstree t;
t=creat_bstree(t);
if(isbstree(t))
cout<<"yes";
else
cout<<"no";
return 0;
}