// 树的遍历.cpp
#include <iostream>
#include <vector>
using namespace std;
vector<int>v, p, q, r;
int m;
void PostTraverse(int i) {
if (i <= m) {
PostTraverse(2 * i);
PostTraverse(2 * i + 1);
p.push_back(v[i]);
}
}
void InorderTraverse(int i) {
if (i <= m) {
InorderTraverse(2 * i);
q.push_back(v[i]);
InorderTraverse(2 * i + 1);
}
}
void PreTraverse(int i) {
if (i <= m) {
r.push_back(v[i]);
PreTraverse(2 * i);
PreTraverse(2 * i + 1);
}
}
int main()
{
cin >>m;
v = vector<int>(m + 1);
for (int i = 1; i <= m; i++)
cin >> v[i];
PostTraverse(1);
int w = p.size();
for (int x : p)
--w ? printf("%d ", x) : printf("%d\n", x);
InorderTraverse(1);
w = q.size();
for (int x : q)
--w ? printf("%d ", x) : printf("%d\n", x);
PreTraverse(1);
w = r.size();
for (int x : r)
--w ? printf("%d ", x) : printf("%d\n", x);
return 0;
}
06-28
127
04-21