Реализация двоичного дерева на C++ со вставкой и порядковым обходом

Вот реализация двоичного дерева на C++:

#include <iostream>
struct Node {
    int data;
    Node* left;
    Node* right;
    Node(int value) {
        data = value;
        left = nullptr;
        right = nullptr;
    }
};
class BinaryTree {
private:
    Node* root;
public:
    BinaryTree() {
        root = nullptr;
    }
    void insert(int value) {
        root = insertRecursive(root, value);
    }
    Node* insertRecursive(Node* currentNode, int value) {
        if (currentNode == nullptr) {
            return new Node(value);
        }
        if (value < currentNode->data) {
            currentNode->left = insertRecursive(currentNode->left, value);
        } else if (value > currentNode->data) {
            currentNode->right = insertRecursive(currentNode->right, value);
        }
        return currentNode;
    }
    void printInOrder() {
        printInOrderRecursive(root);
        std::cout << std::endl;
    }
    void printInOrderRecursive(Node* currentNode) {
        if (currentNode != nullptr) {
            printInOrderRecursive(currentNode->left);
            std::cout << currentNode->data << " ";
            printInOrderRecursive(currentNode->right);
        }
    }
};
int main() {
    BinaryTree tree;
    // Inserting elements into the binary tree
    tree.insert(5);
    tree.insert(3);
    tree.insert(7);
    tree.insert(1);
    tree.insert(4);
    // Printing the elements in the binary tree in order
    std::cout << "In-order traversal: ";
    tree.printInOrder();
    return 0;
}

Эта реализация включает структуру Nodeдля представления каждого узла в двоичном дереве и класс BinaryTreeдля обработки операций с деревом. Метод insertпозволяет вставлять элементы в дерево, а метод printInOrderвыполняет обход дерева по порядку и печатает элементы.