题目:http://acm.hdu.edu.cn/showproblem.php?pid=3791
先建立二叉排序树,然后进行比较。比较时采用递归。
代码:
void insert(BiTree &t, BiTree s)//插入节点;
{
if(s==NULL)return;
BiTree p,temp;
if(t==NULL){
t=s;
}
else{
p=t;
while(p!=NULL){
temp=p;
if(s->data<p->data){//往左;
p=p->left;
}
else{//往右;
p=p->right;
}
}
if(s->data<temp->data){//插入到左子树;
temp->left=s;
}
else{//插入到右子树;
temp->right=s;
}
}
}
int check(BiTree s,BiTree t){//比较两树是否相同;0表示相同,否则不相同;
if(s==NULL&&t==NULL){
return 0;
}
else if((s==NULL&&t!=NULL)||(s!=NULL&&t==NULL)){
return 1;
}
else{
if(s->data!=t->data){
return 1;
}
else{
return check(s->left,t->left)+check(s->right,t->right);
}
}
}
int main(){
int n,len1,len2,i,result;
char s[11],q[11];
while(scanf("%d",&n)!=EOF){
if(n==0)break;
getchar();
scanf("%s",s);
len1=strlen(s);
BiTree t;
t=NULL;
for(i=0;i<len1;i++)//建立示范序列的二叉树;
{
BiTree p;
p=(BiTree)malloc(sizeof(BTNode));
p->data=s[i]-'0';
p->left=NULL;
p->right=NULL;
insert(t,p);
}
while(n--){
scanf("%s",q);
len2=strlen(q);
BiTree r;
r=NULL;
for(i=0;i<len1;i++)//建立示范序列的二叉树;
{
BiTree p;
p=(BiTree)malloc(sizeof(BTNode));
p->data=q[i]-'0';
p->left=NULL;
p->right=NULL;
insert(r,p);
}
result=check(r,t);
if(result==0){
printf("YES/n");
}
else{
printf("NO/n");
}
}
}
}