思路:相当于每次将根节放在最后面,当然要符合后续遍历的顺序
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int> pro, in, back;
int pos;
void rec(int l, int r){
//输出地轨过程中的左右值
//cout<<"l: "<<l<<"r: "<<r<<endl;
if(l>=r) return;
int root = pro[pos++];
int m = distance(in.begin(), find(in.begin(), in.end(), root));
rec(l,m);
rec(m+1,r);
back.push_back(root);
}
void solve(){
pos = 0;
rec(0, pro.size());
for(int i=0; i<pro.size(); ++i){
cout<<back[i]<<" ";
}
}
int main(){
int n, k;
cin>>n;
for(int i=0; i<n; ++i){
cin>>k;
pro.push_back(k);
}
for(int i=0; i<n; ++i){
cin>>k;
in.push_back(k);
}
solve();
return 0;
}