Символьное бинарное дерево с выводом строки из символов

Вроде должно работать нормально, но происходит один запрос на ввод символа и больше ничего. Нужно создать бинарное дерево и записать в каждый узел символ, введённый пользователем, затем написать функцию с возвратом строки из этих символов

#include <iostream>
#include <Windows.h>
#include <cstring>
using namespace std;

struct tnode {
    char symbol;           // поле данных
    struct tnode* left;  // левый потомок
    struct tnode* right; // правый потомок
};

struct tnode* addnode(tnode* tree);
string treeprint(tnode* tree, string symbols);
void freemem(tnode* tree);

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    struct tnode* root;
    root = NULL;
    string symbols;
    symbols.clear();

    root = addnode(root);
    cout << treeprint(root, symbols);
    freemem(root);

    system("pause");
    return 0;
}

struct tnode* addnode(tnode* tree) {
    int choice;
    char x;
    cout << "Хотите ли Вы продолжить?" << endl;
    cout << "1)Yes; 2)No" << endl;
    cin >> choice;
    switch (choice) {
    case 1:
        cout << "Введите символ:" << endl;
        cin >> x;
        if (tree == NULL) { // Если дерева нет, то формируем корень
            tree = new tnode; // память под узел
            tree->symbol = x;   // поле данных
            tree->left = NULL;
            tree->right = NULL; // ветви инициализируем пустотой
        }
        else  if (x < tree->symbol)   // условие добавление левого потомка
            tree->left = addnode(tree->left);
        else    // условие добавление правого потомка
            tree->right = addnode(tree->right);
        return(tree);
        break;
    case 2:
        return(tree);
        break;
    }
}

string treeprint(tnode* tree, string symbols) {
    if (tree != NULL) { //Пока не встретится пустой узел
        symbols += tree->symbol; //Отображаем корень дерева
        treeprint(tree->left, symbols); //Рекурсивная функция для левого поддерева
        treeprint(tree->right, symbols); //Рекурсивная функция для правого поддерева
    }
    return symbols;
}

void freemem(tnode* tree) {
    if (tree != NULL) {
        freemem(tree->left);
        freemem(tree->right);
        delete tree;
    }
}

Ответы (0 шт):