#include <bits/stdc++.h>
using namespace std;
int preind = 0;
struct Result {
Result() : output1(){};
int output1[10000];
};
Result glob;
int find(vector<int>& arr, int stin, int endin, int data) {
for (int i = stin; i <= endin; i++) {
if (arr[i] == data) {
return i;
}
}
return -1;
}
void printPost(vector<int>& arr, vector<int>& pre, int ins, int ine) {
if (ins > ine) {
return;
}
int ind = find(arr, ins, ine, pre[preind++]);
printPost(arr, pre, ins, ind - 1);
printPost(arr, pre, ind + 1, ine);
glob.output1[ind] = arr[ind];
}
Result getPostorder(vector<int>& inorder, vector<int>& preorder) {
printPost(inorder, preorder, 0, inorder.size() - 1);
return glob;
}
int main() {
vector<int> arr = {4, 2, 5, 1, 3, 6};
vector<int> pre = {1, 2, 4, 5, 3, 6};
Result postorderResult = getPostorder(arr, pre);
for (int i = 0; i < arr.size(); i++) {
if (i > 0) {
cout << " ";
}
cout << postorderResult.output1[i];
}
cout << endl;
return 0;
}