#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<stack>
#include<list>
#include<set>
using namespace std;
#define LL long long
const int maxn=20+10;
typedef struct tree
{
tree *l;
tree *r;
char data;
}tree;
tree *root;
tree* creat(char *p,char *mid,int n)
{
tree *temp;
for(int i=0;i<n;i++)
{
if(p[0]==mid[i])
{
temp=new tree;
temp->data=mid[i];
temp->l=creat(p+1,mid,i);
temp->r=creat(p+i+1,mid+i+1,n-i-1);
return temp;
}
}
return NULL;
}
void prit(tree *rt)
{
if(rt!=NULL)
{
prit(rt->l);
prit(rt->r);
printf("%c",rt->data);
}
}
int main()
{
char p[maxn],mid[maxn];
while(scanf("%s %s",p,mid)!=EOF)
{
int len=strlen(p);
root=NULL;
root=creat(p,mid,len);
prit(root);
cout<<endl;
delete(root);
}
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<stack>
#include<list>
#include<set>
using namespace std;
#define LL long long
const int maxn=2000+10;
typedef struct tree
{
tree *l;
tree *r;
int data;
}tree;
tree *root;
tree* creat(int *p,int *mid,int n)
{
tree *temp;
for(int i=0;i<n;i++)
{
if(p[0]==mid[i])
{
temp=new tree;
temp->data=mid[i];
temp->l=creat(p+1,mid,i);
temp->r=creat(p+i+1,mid+i+1,n-i-1);
return temp;
}
}
return NULL;
}
void prit(tree *rt)
{
if(rt!=NULL)
{
prit(rt->l);
prit(rt->r);
if(rt==root)
cout<<rt->data<<endl;
else cout<<rt->data<<" ";
}
}
int main()
{
int n;
int p[maxn],mid[maxn];
while(~scanf("%d",&n))
{
root=NULL;
for(int i=0;i<n;i++)
scanf("%d",&p[i]);
for(int i=0;i<n;i++)
scanf("%d",&mid[i]);
root=creat(p,mid,n);
prit(root);
delete(root);
}
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<stack>
#include<list>
#include<set>
using namespace std;
#define LL long long
const int maxn=25+10;
typedef struct tree
{
tree *l;
tree *r;
int data;
} tree;
tree *root;
tree* creat(int *p,int *mid,int n)
{
tree *temp;
for(int i=0; i<n; i++)
{
if(p[0]==mid[i])
{
temp=new tree;
temp->data=mid[i];
temp->l=creat(p+1,mid,i);
temp->r=creat(p+i+1,mid+i+1,n-i-1);
return temp;
}
}
return NULL;
}
void bfs()
{
tree *temp;
vector<int>v;
queue<tree*> q;
q.push(root);
while(!q.empty())
{
temp=q.front();
q.pop();
v.push_back(temp->data);
if(temp->r!=NULL) q.push(temp->r);
if(temp->l!=NULL) q.push(temp->l);
}
for(int i=0; i<v.size(); i++)
i==0?cout<<v[i]:cout<<" "<<v[i];
cout<<endl;
}
int main()
{
int n;
int p[maxn],mid[maxn];
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&mid[i]);
for(int i=0; i<n; i++)
scanf("%d",&p[i]);
root=creat(p,mid,n);
bfs();
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<stack>
#include<list>
#include<set>
using namespace std;
#define LL long long
const int maxn=25+10;
typedef struct tree
{
tree *l;
tree *r;
int data;
} tree;
tree *root;
tree* creat(int *mid,int *e,int n)
{
tree *temp;
for(int i=0;i<n;i++)
{
if(e[n-1]==mid[i])
{
temp=new tree;
temp->data=mid[i];
temp->l=creat(mid,e,i);
temp->r=creat(mid+i+1,e+i,n-i-1);
return temp;
}
}
return NULL;
}
void bfs()
{
queue<tree*> q;
q.push(root);
vector<int>v;
while(!q.empty())
{
tree *temp=q.front();
q.pop();
v.push_back(temp->data);
if(temp->l!=NULL) q.push(temp->l);
if(temp->r!=NULL) q.push(temp->r);
}
for(int i=0;i<v.size();i++)
{
i==0?printf("%d",v[i]):printf(" %d",v[i]);
}
cout<<endl;
}
int main()
{
int n;
int e[maxn],mid[maxn];
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&e[i]);
for(int i=0; i<n; i++)
scanf("%d",&mid[i]);
root = creat(mid,e,n);
bfs();
}
太弱