#include <iostream>
template <class T>
class BinaryTree {
private:
struct Node {
T data;
Node* left;
Node* right;
Node(const T& d, Node* l = nullptr, Node* r = nullptr) : data(d), left(l), right(r) {}
};
Node* root;
void insertHelper(const T& data, Node* &node) {
if (!node) {
node = new Node(data);
} else if (data < node->data) {
insertHelper(data, node->left);
} else {
insertHelper(data, node->right);
}
}
void inorderHelper(Node* node) {
if (node) {
inorderHelper(node->left);
std::cout << node->data << " ";
inorderHelper(node->right);
}
}
public:
BinaryTree() : root(nullptr) {}
void insert(const T& data) {
insertHelper(data, root);
}
void inorder() {
inorderHelper(root);
std::cout << std::endl;
}
};
int main() {
BinaryTree<int> tree;
tree.insert(5);
tree.insert(3);
tree.insert(7);
tree.insert(1);
tree.insert(4);
tree.insert(6);
tree.insert(8);
std::cout << "Inorder traversal of binary tree: ";
tree.inorder();
BinaryTree<std::string> strTree;
strTree.insert("apple");
strTree.insert("banana");
strTree.insert("cherry");
strTree.insert("date");
std::cout << "Inorder traversal of binary tree: ";
strTree.inorder();
return 0;
}