链接: https://pintia.cn/problem-sets/1097067173224390656/problems/1097067227884560393
AC代码:
#include <iostream>
#include <cstring>
using namespace std;
int s1[35],s2[35],v[35],cnt=0,n;
void dfs(int l,int r) {
if(l==r) {
cout<<s2[l];
cnt++;
if(cnt<n) cout<<" ";
return ;
} else if(l>r) {
return ;
} else {
int root,maxn=0,flag;
for(int i=l; i<=r; i++) {
if(maxn<v[s2[i]]) {
maxn=v[s2[i]];
root=s2[i];
flag=i;
}
}
cout<<root
cnt++;
if(cnt<n) cout<<" ";
dfs(l,flag-1);
dfs(flag+1,r);
}
}
int main() {
int k=1;
cin>>n;
for(int i=1; i<=n; i++) {
cin>>s1[i];
v[s1[i]]=k++;
}
for(int i=1; i<=n; i++) {
cin>>s2[i];
}
cout<<"Preorder:";
dfs(1,n);
return 0;
}