Не понимаю как создать узел дерева, в который можно запихнуть другие объэкти
У меня есть реализация разных деревьев. По заданию мне надо строить дерево из объектов что угодно (int, string, vecrot) книга, персонаж. Я это реализовал так, что каждый из этих классов это узел дерева. Но преподаватель сказал, что это неправильно. Надо эти объекты засовывать в узел и так строить дерево. Я пытался переделать, но запутался в шаблонам и мне кажется, что делаю как-то не так. Не могли бы мне помочь и исправить в моем проекте? Вот тут можете посмотреть как я реализовал github.com/LavrovSergey/OOP
friend class BinarySearchTree<string, BookNode>;
public:
BookNode* left;
BookNode* right;
string data; //name of the book
vector<string> authors;
int d, m, y;
int pages;
string plot;
int id = 0;
bool way;
};
Это надо разделить на Node в котором будут указатели на лево право и шаблон в котором будут мои объекты. Ну вот с этого и начинаются проблемы. Я начинаю путаться в шаблонах и не знаю как тут правильно к ним обращаться. Вот пример. Это начало реализации дерева. Тут мы объявляем класс функций(тут мы работаем с ввод, ввывод, записью). В этот класс у нас входит с каким типом мы работаем и узел.
int menu3(bool isRunning, int a)
{
Functions<string, Part1<string>> s;
Functions<string, Part1<string>> s_v;
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
isRunning = true;
while (isRunning)
{
int answer = 0;
answer = menu_console();
switch (answer)
{
case 0: s.AddLeaf(a); break;
case 1: s.PrintInOrder(a); break;
case 2: s.PrintPreOrder(a); break;
case 3: s.PrintPostOrder(a); break;
case 4: s.FindByTheWay(a); break;
case 5: s.Find(a); break;
case 6: s.PrintInOrder(a); s.Delete(a, 1); break;
case 7: s.PrintInOrder(a); s.Delete(a, 2); break;
case 8: s.PrintInOrder(a); s.Delete(a, 3); break;
case 9: s_v.AddLeaf_vect(a); break;
case 10: s_v.PrintInOrder_vect(a); break;
case 11: s_v.PrintPreOrder_vect(a); break;
case 12: s_v.PrintPostOrder_vect(a); break;
case 13: s_v.FindByTheWay(a); break;
case 14: s_v.Find_vect(a); break;
case 15: s_v.PrintInOrder_vect(a); s_v.Delete_vect(a, 1); break;
case 16: s_v.PrintInOrder_vect(a); s_v.Delete_vect(a, 2); break;
case 17: s_v.PrintInOrder_vect(a); s_v.Delete_vect(a, 3); break;
case 18: system("cls"); cout << "Goodbye!\n__________________"; isRunning = false;
}
}
return 0;
}
Узел вот такой
class Node {
friend class BinarySearchTree<T, Node<T>>;
friend class BinaryTree<T, Node<T>>;
friend class TreeChildrenList<T, Node<T>>;
public:
Node<T>* left;
Node<T>* right;
T data;
std::vector<T> v;
int id = 0;
bool way;
};
Вот кусочек дерева
template<class T, class U>
/*! Class binary search tree*/
class BinarySearchTree
{
public:
int d = 1;
U* root;
/*!Creating a Node.*/
void creat_leaf(T e, bool way1) {
U* cur = new U;
cur->data = e;
cur->way = way1;
cur->left = NULL;
cur->right = NULL;
cur->id = d++;
AddLeaf(cur, root);
};
/*! Adding a Node.*/
void AddLeaf(U* cur, U* node) {
if (root == NULL)
{
root = cur;
}
else if (cur->data <= node->data)
{
if (node->left != NULL)
{
AddLeaf(cur, node->left);
}
else
{
node->left = cur;
cur->way = 0;
}
}
else if (cur->data > node->data)
{
if (node->right != NULL)
{
AddLeaf(cur, node->right);
}
else
{
node->right = cur;
cur->way = 1;
}
}
}
};
А как сделать узел отдельным от моих объектов и пользоваться, обращаться к нему я знаю. Не могли бы вы исправить на этих кусках имея отдельно класс узла или взять несколько файлов из моего гита и исправить в них такую часть, что я смог понять и исправить все остальное?