#include<iostream> #include<cstdio> #include<vector> #include<algorithm> #include<cstring> #include<string> #include<map> #include<set> #include<queue> #include<iomanip> #include<stack> using namespace std; #define STDIN freopen("in.in", "r", stdin);freopen("out.out", "w", stdout); const int N = 100; int pre[N], mid[N]; int n; int le[N], ri[N]; int build(int l1, int r1, int l2, int r2) { if (l1 > r1 || l2 > r2) return 0; int rt = pre[l2]; int j = l1; for (int i = l1; i <= r1; i++) { if (rt == mid[i]) { j = i; break; } } int cnt = j - l1; le[rt] = build(l1, j-1, l2 + 1, l2 + cnt); ri[rt] = build(j + 1, r1, l2 + cnt + 1, r2); return rt; } int main() { //STDIN cin >> n; for (int i = 1; i <= n; i++) cin >> mid[i]; for (int i = 1; i <= n; i++) cin >> pre[i]; le[0] = build(1, n, 1, n); queue<int> que; que.push(le[0]); vector<int> ans; while(que.size()) { auto t = que.front(); que.pop(); ans.push_back(t); if (ri[t] > 0) que.push(ri[t]); if (le[t] > 0) que.push(le[t]); } int len = ans.size(); for (int i = 0 ; i < len; i++) printf("%d%c", ans[i], " \n"[i == len-1]); }
原文:https://www.cnblogs.com/hulian425/p/14033438.html