一开始读题读错了,没有正确理解题意;题目说的是判断两序列是否为同一二叉排序树而不是说由两序列所建立的二叉排序树是否为同一棵树!真是失误,我的锅!
代码:
#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}btnode;
btnode *tree=NULL,*tree1=NULL;
char biaozhun[15];
char s[15];
int qian,zhong,biao,hou;
char qianxu1[55],zhongxu1[55],houxu1[88];
void jianshu(btnode *&p,char k)
{
if(p==NULL)
{
p=(btnode *)malloc(sizeof(btnode));
p->data=k;
p->lchild=p->rchild=NULL;
}
else if(k==p->data)
return;
else if(k<p->data)
jianshu(p->lchild,k);
else
jianshu(p->rchild,k);
}
void qianxu(btnode *p)
{
if(p)
{
qianxu1[qian++]=p->data;
qianxu(p->lchild);
qianxu(p->rchild);
}
}
void zhongxu(btnode *p)
{
if(p)
{
zhongxu1[zhong++]=p->data;
zhongxu(p->lchild);
zhongxu(p->rchild);
}
}
void houxu(btnode *p)
{
if(p)
{
houxu1[hou++]=p->data;
houxu(p->lchild);
houxu(p->rchild);
}
}
int main()
{
int i,len,m;
while(cin>>m&&m!=0)
{
struct node *tree;
tree=NULL;
cin>>biaozhun;
len=strlen(biaozhun);
for(i=0;i<len;i++)
jianshu(tree,biaozhun[i]);
qian=0;
qianxu(tree);
zhong=0;
zhongxu(tree);
hou=0;
houxu(tree);
while(m--)
{
cin>>s;
if(strcmp(qianxu1,s)==0||strcmp(zhongxu1,s)==0||strcmp(biaozhun,s)==0||strcmp(houxu1,s)==0)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
return 0;
}
SDUT的OJ平台数据还是不够强大;我都看出来数据不完整了!