1020. Tree Traversals (25)
#include
#include
using namespace std;
int N;
vector
input[2];
vector
ans[31];
void build(int deep, int l1, int r1, int l2, int r2)
{
if (l1 > r1 || l2 > r2) return;
ans[deep].push_back(input[0][r1]);
int root = input[0][r1];
int i;
for (i = l2; i <= r2; i++)
{
if (input[1][i] == root) break;
}
i -= l2 + 1;
build(deep + 1, l1, l1 + i, l2, l2 + i);
build(deep + 1, l1 + i + 1, r1 - 1, l2 + i + 2, r2);
}
int main()
{
cin >> N;
for (int i = 0; i < N; i++)
{
int temp;
cin >> temp;
input[0].push_back(temp);
}
for (int i = 0; i < N; i++)
{
int temp;
cin >> temp;
input[1].push_back(temp);
}
build(0, 0, N - 1, 0, N - 1);
cout << ans[0].front();
ans[0].erase(ans[0].begin());
for (int i = 0; i < 31; i++)
{
for (auto it : ans[i])
{
cout << ' ' << it;
}
}
system("PAUSE");
}