![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d3ff1065e4f26ce8b0d0a543a173a1c4.png)
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode *Tree;
struct TreeNode {
int V;
Tree Left,Right;
int flag;
};
Tree MakeTree(int N);
Tree NewNode(int V);
Tree Insert(Tree T, int V);
int Judge(Tree T, int N);
int check(Tree T, int V);
void ResetT(Tree T);
void FreeTree(Tree T);
int main() {
int N,L,i;
Tree T;
scanf("%d",&N);
while(N) {
scanf("%d",&L);
T=MakeTree(N);
for(i=0; i<L; i++) {
if(Judge(T,N))
printf("Yes\n");
else
printf("No\n");
ResetT(T);
}
FreeTree(T);
scanf("%d",&N);
}
return 0;
}
Tree MakeTree(int N) {
Tree T;
int V,i;
scanf("%d",&V);
T=NewNode(V);
for(i=1; i<N; i++) {
scanf("%d",&V);
T=Insert(T,V);
}
return T;
}
Tree NewNode(int V) {
Tree T=(Tree)malloc(sizeof(struct TreeNode));
T->V=V;
T->Left=T->Right=NULL;
T->flag=0;
return T;
}
Tree Insert(Tree T, int V) {
if(!T)
T=NewNode(V);
else {
if(V>T->V)
T->Right=Insert(T->Right, V);
else
T->Left=Insert(T->Left, V);
}
return T;
}
int Judge(Tree T, int N) {
int i,V;
int flag=0;
scanf("%d",&V);
if(V!=T->V) flag=1;
else T->flag=1;
for(i=1;i<N;i++){
scanf("%d",&V);
if((!flag)&&(!check(T,V)))flag=1;
}
if(!flag) return 1;
else return 0;
}
int check(Tree T, int V) {
if(T->flag) {
if(V<T->V)
return check(T->Left, V);
else if(V>T->V)
return check(T->Right, V);
else
return 0;
} else {
if(V==T->V){
T->flag=1;
return 1;
}else
return 0;
}
}
void ResetT(Tree T) {
if(T->Left) ResetT(T->Left);
if(T->Right) ResetT(T->Right);
T->flag=0;
}
void FreeTree(Tree T) {
if(T->Left) FreeTree(T->Left);
if(T->Right) FreeTree(T->Right);
free(T);
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d5e7ea22746cb74a0be996a885ff4976.png)