#include #include using namespace std; template struct Node { T element; Node* left; Node* right; Node(const T& e) : element(e), left(nullptr), right(nullptr) {} }; template class BinTree { public: Node* root; int height; vector arr; BinTree() : root(nullptr), height(0) {} BinTree(const vector& arrs) : arr(arrs), height(0) {} void test() { for (auto x : arr) { cout << x << " "; } } Node* returnroot() { return this->root; } Node* build(int& index) { if (index >= arr.size() || arr[index] == 0) { index++; return nullptr; } Node* node = new Node(arr[index]); index++; node->left = build(index); //cout << "build left "; node->right = build(index); //cout << "build right "; return node; } void buildTree() { int index = 0; this->root = build(index); } //تن³ِ void preorder(Node* node) { if (node == nullptr) return; cout << node->element << " "; preorder(node->left); preorder(node->right); } void inorder(Node* node) { if (node == nullptr) return; inorder(node->left); cout << node->element << " "; inorder(node->right); } void postorder(Node* node) { if (node == nullptr) return; postorder(node->left); postorder(node->right); cout << node->element << " "; } }; int main() { int x = 0; vector arr; int tmp; Node* parent; while (cin >> tmp) { arr.push_back(tmp); } BinTree tree(arr); tree.buildTree(); //tree.test(); auto r = tree.root; tree.preorder(r); cout << endl; tree.inorder(r); cout << endl; tree.postorder(r); cout << endl; return 0; }