判断两个序列能不能组成一样的二叉树,首先把树建起来,左结点比根小,右结点比根大
然后对它进行遍历,看能不能得到相同的结果
遍历分为前序中序后序就不多说啦
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define Null 0
typedef struct Tree{
Tree *right,*left;
int value;
}Tree;
Tree *root;
int count,cnt,a[12],b[12];
Tree *create(int x)
{
Tree *t=(Tree*)malloc(sizeof(Tree));
t->left=0;
t->right=0;
t->value=x;
return t;
}
Tree *insert(Tree *s,int x)
{
Tree *t;
if(s==Null)
{
t=create(x);
s=t;
}
else
{
if(s->value>=x)s->left=insert(s->left,x);
else s->right=insert(s->right,x);
}
return s;
}
void serch(Tree *root)
{
if(root!=Null)
{
b[count++]=root->value;
serch(root->left);
serch(root->right);
}
}
int main()
{
int n;
char str[12];
while(scanf("%d",&n)!=EOF)
{
root=Null;
count=0;
if(n==0)break;
scanf("%s",str);
int len=strlen(str);
for(int i=0;i<len;i++)
{
int tmp=str[i]-48;
root=insert(root,tmp);
}
serch(root);
memcpy(a,b,sizeof(b));
while(n--)
{
count=0;
scanf("%s",str);
root=Null;
for(int i=0;i<len;i++)
{
int tmp=str[i]-48;
printf("%d",str[i]);
root=insert(root,tmp);
}
serch(root);
cnt=0;
for(int i=0;i<len;i++)
if(a[i]!=b[i])
{
printf("NO\n");
break;
}
else cnt++;
if(cnt>=len)
printf("YES\n");
}
}
}