SDUT OJ 3373 (https://acm.sdut.edu.cn/onlinejudge3/problems/3373)
解析:创建二叉树并比较。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
int d;
struct node *l,*r;
};
struct node *creat(struct node *p,int c)//创建二叉排序树
{
if(p==NULL)
{
p=(struct node*)malloc(sizeof(struct node));
p->l=NULL;
p->r=NULL;
p->d=c;
return p;
}
else
{
if(c<p->d){
p->l=creat(p->l,c);
return p;}
else{
p->r=creat(p->r,c);
return p;}
}
return p;
}
int pan(struct node *p,struct node *q)//判断两个二叉树是否相同
{
if(p==NULL&&q==NULL)
return 1;
else if(p->d==q->d)
{
if(pan(p->l,q->l))
return 1;
else
return 0;
if(pan(p->r,q->r))
return 1;
else
return 0;
}
else
return 0;
}//相同返回1,否则返回0
int main()
{
int m,n,l;
while(~scanf("%d",&n)&&n)
{
scanf("%d",&l);
int c;
struct node *p=NULL;
for(m=0;m<n;m++)
{
scanf("%d",&c);
p=creat(p,c);
}
while(l--)
{
struct node *q=NULL;
for(m=0;m<n;m++)
{
scanf("%d",&c);
q=creat(q,c);
}
if(pan(p,q)==1)
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}