public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine());
while (t-- > 0) {
int n = Integer.parseInt(br.readLine());
int[] preOrder = new int[n];
int[] inOrder = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++)
preOrder[i] = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++)
inOrder[i] = Integer.parseInt(st.nextToken());
buildPostOrder(preOrder, inOrder, 0, 0, n, sb);
sb.append("\n");
}
System.out.print(sb);
}
private static void buildPostOrder(int[] preOrder, int[] inOrder, int rootIdx, int start, int end,
StringBuilder sb) {
if (start >= end)
return;
int root = preOrder[rootIdx];
int rootPos = findRootIndex(inOrder, start, end, root);
buildPostOrder(preOrder, inOrder, rootIdx + 1, start, rootPos, sb);
buildPostOrder(preOrder, inOrder, rootIdx + 1 + rootPos - start, rootPos + 1, end, sb);
sb.append(root).append(" ");
}
private static int findRootIndex(int[] inOrder, int start, int end, int root) {
for (int i = start; i < end; i++) {
if (inOrder[i] == root)
return i;
}
return -1;
}
출처:https://www.acmicpc.net/problem/4256
