二叉排序树
Time Limit: 1000MS Memory limit: 65536K
题目描述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)
输出
示例输入
2 123456789 987654321 432156789 0
示例输出
NO NO
参考代码:
#include
bool flag;
struct node
{
int data; struct node *l,*r;
};
void inser (struct node *&p, char k)
{
if (p==NULL)
{
p=new node;
p->data=k;
p->l=p->r=NULL;
}
else if (k
data)
inser (p->l,k);
else
inser (p->r,k);
}
struct node *creat(char a[],int n)
{
struct node *T=NULL;
int i=0;
while (i
data!=p->data) {flag=0;return;}
else
{
comper(t->l,p->l);
comper(t->r,p->r);
}
}
void freedom(struct node *p)
{
if(p==NULL) return;
freedom(p->l);
freedom(p->r);
free(p);
}
int main()
{
struct node *t,*p;
int n;
while (scanf ("%d",&n)!=EOF,n)
{
char s[15];
scanf ("%s",s);
t=creat(s,strlen(s));
while (n--)
{
flag=1;
scanf ("%s",s);
p=creat(s,strlen(s));
comper(t,p);
if (flag) printf ("YES\n");
else printf ("NO\n");
freedom(p);
}
freedom(t);
}
return 0;
}