【分析】
一开始不知道如何做
因为觉得一个序列不可能确定一颗唯一的树
其实二叉搜索树(或者二叉查找数、二叉排序树)是可以的
它的左孩子永远小于根
右孩子永远大于根
所以还以那一套模板
建树、建结点、插入
然后判断是否是同一个二叉搜索树可以先用前序遍历
然后看看遍历出来的顺序是否相等
就可以了
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
struct node{
char data;
node* lchild;
node* rchild;
};
node* newNode(char v)
{
node* Node=new node;
Node->data=v;
Node->lchild=Node->rchild=NULL;
return Node;
}
void insert(node* &root,char x)//这里&要注意,根可能一直在变化
{
if(root==NULL)
{
root=newNode(x);
return;
}
if(root->data==x)
return;
else if(x<root->data)
insert(root->lchild,x);
else
insert(root->rchild,x);
}
node* create(string data,int n)
{
node* root=NULL;
for(int i=0;i<n;i++)
insert(root,data[i]);
return root;
}
void preorder(node* root,string& str)//这里的&也要注意,可能一直在变化
{
if(root==NULL)
return;
str+=root->data;
preorder(root->lchild,str);
preorder(root->rchild,str);
}
int main()
{
int t;
while(~scanf("%d",&t)&&t!=0)
{
string str;
cin>>str;
int len=str.size();
node* root=create(str,len);
string ret1;
preorder(root,ret1);
while(t--)
{
cin>>str;
node* Proot=create(str,len);
string ret2;
preorder(Proot,ret2);
if(ret1==ret2)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}