数据结构5
7-4 先序和中序构造二叉树;
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=100010; int n; int pre[N],med[N],post[N]; int cnt; void dfs(int pl,int pr,int ml,int mr){ if(pl==pr){ post[++cnt]=pre[pl]; return; } int idx=ml; while(med[idx]!=pre[pl]&&idx<=n){ idx++; } if(idx!=ml) dfs(pl+1,pl+(idx-ml),ml,idx-1); if(idx!=mr) dfs(pl+(idx-ml)+1,pr,idx+1,mr); post[++cnt]=pre[pl]; } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>pre[i]; } for(int i=1;i<=n;i++){ cin>>med[i]; } dfs(1,n,1,n); for(int i=1;i<=n;i++){ cout<<post[i]<<" "; } return 0; }