C++
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int pre[N], in[N], post[N];
int k;
struct node {
int value;
node *left;
node *right;
node(int value = 0, node *left = NULL, node *right = NULL) : value(value), left(left), right(right) {}
};
void buildtree(int l, int r, int &t, node *&root) {
int flag = -1;
for (int i = l; i <= r; i++) {
if (in[i] == pre[t]) {
flag = i;
break;
}
}
if (flag == -1)
return;
root = new node(in[flag]);
t++;
if (flag > l)
buildtree(l, flag - 1, t, root->left);
if (flag < r)
buildtree(flag + 1, r, t, root->right);
}
void preorder(node *root) {
if (root != NULL) {
post[k++] = root->value;
preorder(root->left);
preorder(root->right);
}
}
void inorder(node *root) {
if (root != NULL) {
inorder(root->left);
post[k++] = root->value;
inorder(root->right);
}
}
void postorder(node *root) {
if (root != NULL) {
postorder(root->left);
postorder(root->right);
post[k++] = root->value;
}
}
void remove_tree(node *root) {
if (root == NULL) {
return;
}
remove_tree(root->left);
remove_tree(root->right);
delete root;
}
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &pre[i]);
for (int i = 1; i <= n; i++)
scanf("%d", &in[i]);
node *root;
int t = 1;
buildtree(1, n, t, root);
k = 0;
postorder(root);
for (int i = 0; i < k; i++) {
if (i == 0)
printf("%d", post[i]);
else
printf(" %d", post[i]);
}
printf("\n");
remove_tree(root);
return 0;
}