题目链接
解题思路:根据后序和中序序列在构建前序序列的同时用map记录想对应值
AC代码:
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
vector<int>in,post;
map<int,int> mp;
void pre(int root,int start,int end,int index)
{
if(start>end)
return ;
int i=start;
while(i<end&&in[i]!=post[root])
i++;
mp[index]=post[root];
pre(root-end+i-1,start,i-1,2*index+1);
pre(root-1,i+1,end,2*index+2);
}
int main()
{
int n;
scanf("%d",&n);
in.resize(n);
post.resize(n);
for(int i=0;i<n;i++)
scanf("%d",&post[i]);
for(int i=0;i<n;i++)
scanf("%d",&in[i]);
pre(n-1,0,n-1,0);
map<int,int>::iterator it;
it=mp.begin();
printf("%d",it->second);
while(++it!=mp.end())
printf(" %d",it->second);
return 0;
}