def print_tree(node, level=0, prefix="Root: "):
    if node is not None:
        print(" " * (level * 4) + prefix + str(node.value))
        if node.left is not None or node.right is not None:  # Печать дочерних узлов только если они есть
            if node.left:
                print_tree(node.left, level + 1, "L--- ")
            else:
                print(" " * ((level + 1) * 4) + "L--- None")
            if node.right:
                print_tree(node.right, level + 1, "R--- ")
            else:
                print(" " * ((level + 1) * 4) + "R--- None")
            

// Функция для визуализации дерева в консоли с отступами и префиксами
void printTree(TreeNode* node, int level = 0, const std::string& prefix = "Root: ") {
    // Если узел существует, выводим его значение с соответствующим отступом и префиксом
    if (node != nullptr) {
        std::cout << std::string(level * 4, ' ') << prefix << node->val << std::endl;
        // Если есть хотя бы один дочерний узел, переходим к их выводу
        if (node->left != nullptr || node->right != nullptr) {
            // Вывод левого дочернего узла
            if (node->left) {
                printTree(node->left, level + 1, "L--- ");
            } else {
                std::cout << std::string((level + 1) * 4, ' ') << "L--- None" << std::endl;
            }
            // Вывод правого дочернего узла
            if (node->right) {
                printTree(node->right, level + 1, "R--- ");
            } else {
                std::cout << std::string((level + 1) * 4, ' ') << "R--- None" << std::endl;
            }
        }
    }
}