#include <iostream>
#include <queue>
class BinaryTree {
private:
struct Node {
int data;
Node* left;
Node* right;
Node(int val) : data(val), left(nullptr), right(nullptr) {}
};
Node* root;
void destroyTree(Node* node) {
if (node) {
destroyTree(node->left);
destroyTree(node->right);
delete node;
}
}
void inorderTraversal(Node* node) const {
if (node) {
inorderTraversal(node->left);
std::cout << node->data << " ";
inorderTraversal(node->right);
}
}
public:
BinaryTree() : root(nullptr) {}
~BinaryTree() { destroyTree(root); }
void insert(int value) {
if (!root) {
root = new Node(value);
return;
}
std::queue<Node*> q;
q.push(root);
while (!q.empty()) {
Node* temp = q.front();
q.pop();
if (!temp->left) {
temp->left = new Node(value);
return;
} else {
q.push(temp->left);
}
if (!temp->right) {
temp->right = new Node(value);
return;
} else {
q.push(temp->right);
}
}
}
void inorder() const {
inorderTraversal(root);
std::cout << std::endl;
}
};
int main() {
BinaryTree tree;
tree.insert(1);
tree.insert(2);
tree.insert(3);
tree.insert(4);
tree.insert(5);
std::cout << "Inorder traversal: ";
tree.inorder();
return 0;
}