给出先序中序求后序;先找到根节点;
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
void build_tree(int n,int *a,int *b,int *c)
{ int *p=b;
if(n<=0)
return;
while(2)
{
if(a[0]==*p)
{
break;
}else p++;
}
int tt=p-b;
build_tree(tt,a+1,b,c);
build_tree(n-tt-1,a+tt+1,b+tt+1,c+tt);
c[n-1]=a[0];
}
int main()
{ int n;
while(~scanf("%d",&n))
{
int a[1002],b[1002],c[1002];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
{
scanf("%d",&b[i]);
}
build_tree(n,a,b,c);
for(int i=0;i<n-1;i++)
{
printf("%d ",c[i]);
} printf("%d\n",c[n-1]);
}
return 0;
}