#include <iostream>
using namespace std;
const int N=35;
int n;
int pre[N],post[N];
int dfs(int l1,int r1,int l2,int r2,string &in){
if(l1>r1) return 1;
if(pre[l1]!=post[r2]) return 0;
int cnt;
for(int i=0;i<=r1;i++){
string lin,rin;
int lcnt=dfs(l1+1,i,l2,l2+i-l1-1,lin);
int rcnt=dfs(i+1,r1,l2+i-l1,r2-1,rin);
if(rcnt&&lcnt){
cnt+=rcnt*lcnt;
in=lin+to_string(pre[l1])+' '+rin;
if(cnt>1) break;
}
}
return cnt;
}
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>pre[i];
for(int i=0;i<n;i++) cin>>post[i];
string in;//答案
int cnt=dfs(0,n-1,0,n-1,in);
in.pop_back();
if(cnt==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
cout<<in<<endl;
return 0;
}
1119 Pre- and Post-order Traversals (30 分)
最新推荐文章于 2024-05-09 20:18:18 发布