题目:
#include<stdio.h>
#include<stdlib.h>
#define max 10000
int a[max],b[max],c[max];
int n;
typedef struct node* tree;
struct node{
int data;
tree left;
tree right;
};
tree insert(tree t,int x){
if(t==NULL){
t=(tree)malloc(sizeof(struct node));
t->data=x;
t->left=t->right=NULL;
}
else{
if(x<t->data){
t->left=insert(t->left,x);
}
else{
t->right=insert(t->right,x);
}
}
return t;
}
void pre(tree t){
if(t){
b[n++]=t->data;
pre(t->left);
pre(t->right);
}
}
tree freetree(tree t){
if(t){
freetree(t->left);
freetree(t->right);
free(t);
t=NULL;
}
return t;
}
int main(){
int flag=0;
int N,L;
int y=1;
tree T=NULL;
while(y!=0){
scanf("%d",&N);
y=N;
while(N!=0){
scanf("%d",&L);
for(int i=0;i<N;i++){
scanf("%d",&a[i]);
T=insert(T,a[i]);
}
n=0;
pre(T);//得到初始序列的前序遍历b[]
for(int i=0;i<N;i++){
c[i]=b[i];
}
T=freetree(T);
for(int i=0;i<L;i++){
for(int j=0;j<N;j++){
scanf("%d",&a[j]);
T=insert(T,a[j]);
}
n=0;
pre(T);
for(int k=0;k<N;k++){
if(b[k]!=c[k]){
flag++;
break;
}
}
if(flag==0){
printf("Yes\n");
}
else{
printf("No\n");
}
T=freetree(T);
flag=0;
}
N=0;
}
}
return 0;
}