2026-04-23 21:02:15 +09:00

35 lines
843 B
C

#include <stdio.h>
int N, res_idx = 0;
int inOrderIdx[100001];
int inOrder[100000];
int postOrder[100000];
int preOrder[100000];
void find(int in_start, int in_end, int post_start, int post_end) {
if(in_start > in_end || post_start > post_end) return;
int root = postOrder[post_end];
int root_idx = inOrderIdx[root];
int left_size = root_idx - in_start;
preOrder[res_idx++] = root;
find(in_start, root_idx - 1, post_start, post_start + left_size - 1);
find(root_idx + 1, in_end, post_start + left_size, post_end - 1);
}
int main() {
scanf("%d",&N);
for(int i=0; i<N; i++) {
scanf("%d",&inOrder[i]);
inOrderIdx[inOrder[i]] = i;
}
for(int i=0; i<N; i++) scanf("%d",&postOrder[i]);
find(0, N-1, 0, N-1);
for(int i=0; i<N; i++) printf("%d ",preOrder[i]);
return 0;
}