structnode { int index, value; }; boolcmp(node a, node b){ return a.index < b.index; } vector<int> post, in; vector<node> ans; voidpre(int root, int start, int end, int index){ if (start > end) return; int i = start; while (i < end && in[i] != post[root]) i++; ans.push_back({index, post[root]}); pre(root - 1 - end + i, start, i - 1, 2 * index + 1); pre(root - 1, i + 1, end, 2 * index + 2); } intmain(){ int n; scanf("%d", &n); post.resize(n); in.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); sort(ans.begin(), ans.end(), cmp); for (int i = 0; i < ans.size(); i++) { if (i != 0) cout << " "; cout << ans[i].value; } return0; }
#include<bits/stdc++.h> #define For(i, m, n) for (int i = m; i < n; i++) usingnamespacestd;
vector<int> pre, in; bool flag;
voidpost(int root, int start, int end){ if(start > end || flag) return; int i = start; while(in[i]!=pre[root]) i++; post(root+1, start, i - 1); post(root+i-start+1, i + 1, end); //printf("%d ", in[i]); if(!flag){ printf("%d", in[i]); flag = true; } }
intmain(){ int n; while(scanf("%d",&n)!=EOF){ flag = false; //用于判断是否已经找到第一个数字 pre.resize(n); in.resize(n); For(i, 0, n) scanf("%d", &pre[i]); For(i, 0, n) scanf("%d", &in[i]); post(0, 0, n - 1); } return0; }