Символьное бинарное дерево с выводом строки из символов
Вроде должно работать нормально, но происходит один запрос на ввод символа и больше ничего. Нужно создать бинарное дерево и записать в каждый узел символ, введённый пользователем, затем написать функцию с возвратом строки из этих символов
#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;
}
}