您的位置:首页 > 其它

杭电3791-二叉搜索树

2016-05-17 21:52 337 查看
不知道怎么回事,递归过不了,数组模拟却可以,注释部分为递归代码,为注释部分为数组模拟代码(可以AC),求大神指教。

/*#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct k
{
char data;
k *lchild,*rchild;
}node;
void Build(node *&h,char ch)
{
if(h==NULL)
{
h=(node *)malloc(sizeof(node));
h->data=ch;
h->lchild=h->rchild=NULL;
return ;
}
if(h->data<ch)
Build(h->lchild,ch);
else
Build(h->rchild,ch);
}
bool Judge(node *h1,node *h2)
{
if(h1->data!=h2->data)
{
return false;
}
if(h1->lchild!=NULL&&h2->lchild==NULL||h1->rchild==NULL&&h2->rchild!=NULL)
return false;
if(h1->lchild==NULL&&h2->lchild==NULL&&h1->rchild==NULL&&h2->rchild==NULL)
return true;
int flag1=true,flag2=true;
if(h1->lchild!=NULL&&h2->lchild!=NULL)
{
flag1=Judge(h1->lchild,h2->lchild);
}
if(h1->rchild!=NULL&&h2->rchild!=NULL)
{
flag2=Judge(h1->rchild,h2->rchild);
}
if(flag1&&flag2)return true;
}
int main()
{
int n,len,i,j,len1;
node *head,*head1;
char s[30],s1[30];
scanf("%d",&n);
scanf("%s",s);
len=strlen(s);
head=(node *)malloc(sizeof(node));
head->lchild=head->rchild;
head->data=s[0];
for(i=1;i<len;i++)
{
Build(head,s[i]);
}
for(i=1;i<=n;i++)
{
scanf("%s",s1);
head1=(node *)malloc(sizeof(node));
head1->lchild=head1->rchild=NULL;
head1->data=s1[0];
len1=strlen(s1);
for(j=1;j<len1;j++)
{
Build(head1,s1[j]);
}
int flag=Judge(head,head1);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}*/
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int flag1[1100],flag2[1100];
char s1[15],s2[15];
int main()
{
int n,i,len,j;
int pos;
while(~scanf("%d",&n)&&n)
{
scanf("%s",s1);
len=strlen(s1);
for(i=0;i<1050;i++)
flag1[i]=-1;
for(i=0,pos=1;i<len;i++)
{
while(flag1[pos]!=-1)
{
if(flag1[pos]<s1[i])
{
pos=pos*2+1;
}
else
pos*=2;
}
flag1[pos]=s1[i];
pos=1;
}
for(j=1;j<=n;j++)
{
for(i=0;i<1050;i++)
flag2[i]=-1;
scanf("%s",s2);
len=strlen(s2);
for(i=0,pos=1;i<len;i++)
{
while(flag2[pos]!=-1)
{
if(flag2[pos]<s2[i])
{
pos=pos*2+1;
}
else
pos*=2;
}
flag2[pos]=s2[i];
pos=1;
}
int flag=1;
for(i=1;i<1050;i++)
{
if(flag1[i]!=flag2[i])
{
flag=0;
break;
}
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: