题意:知道二叉树的前序、中序的序列,求数的后序序列。
解法:用递归求解,前序第i个在中序中找到位置,再递归分左右树。
//#define YE
#include<stdio.h>
#include<string.h>
int s1[1001],s2[1001];
int k=0;
int n;
int count=0;
void find(int x,int y)
{
int i;
if(x>y)
{
return ;
}
for(i=x;i<=y;i++)
{
if(s1[k]==s2[i])//找到在中序的位置,跳出。
{
k++;
break;
}
}
find(x,i-1);
find(i+1,y);
if(count==n-1)
{
printf("%d\n",s2[i]);
}
else
{
count++;
printf("%d ",s2[i]);
}
}
int main()
{
#ifdef YE
freopen("123","r",stdin);
#endif
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d",&s1[i]);
}
for(i=0;i<n;i++)
{
scanf("%d",&s2[i]);
}
k=0;
count=0;
find(0,n-1);
}
return 0;
}