#include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <unordered_map> #include <queue> using namespace std; int n; const int N = 40; int postorder[N], inorder[N]; unordered_map<int, int> l, r, pos; int build(int pl, int pr, int il, int ir) { int root = postorder[pr]; int k = pos[root]; if (il < k) { l[root] = build(pl, pl + k - 1 - il, il, k - 1); } if (ir > k) { r[root] = build(pl + k - 1 - il + 1, pr - 1, k + 1, ir); } return root; } void dfs(int root) { queue<int> que; que.push(root); while (que.size()) { auto t = que.front(); que.pop(); cout << t << ' '; if (l.count(t)) { que.push(l[t]); } if (r.count(t)) { que.push(r[t]); } } } int main() { cin >> n; for (int i = 0; i < n; ++i) { cin >> postorder[i]; } for (int i = 0; i < n; ++i) { cin >> inorder[i]; pos[inorder[i]] = i; } int root = build(0, n - 1, 0, n - 1); dfs(root); return 0; }