#include #include #include using std::vector; using std::ios_base; using std::cin; using std::cout; class TreeOrders { int n; vector key; vector left; vector right; public: void read() { cin >> n; key.resize(n); left.resize(n); right.resize(n); for (int i = 0; i < n; i++) { cin >> key[i] >> left[i] >> right[i]; } } vector in_order() { vector result; in_order_visit(0, result); return result; } vector pre_order() { vector result; pre_order_visit(0, result); return result; } vector post_order() { vector result; post_order_visit(0, result); return result; } private: void in_order_visit(int n, vector &r) { if (left[n] != -1) in_order_visit(left[n], r); r.push_back(key[n]); if (right[n] != -1) in_order_visit(right[n], r); } void pre_order_visit(int n, vector &r) { r.push_back(key[n]); if (left[n] != -1) pre_order_visit(left[n], r); if (right[n] != -1) pre_order_visit(right[n], r); } void post_order_visit(int n, vector &r) { if (left[n] != -1) post_order_visit(left[n], r); if (right[n] != -1) post_order_visit(right[n], r); r.push_back(key[n]); } }; void print(vector a) { for (size_t i = 0; i < a.size(); i++) { if (i > 0) { cout << ' '; } cout << a[i]; } cout << '\n'; } int main() { ios_base::sync_with_stdio(0); TreeOrders t; t.read(); print(t.in_order()); print(t.pre_order()); print(t.post_order()); return 0; }