Не понимаю как создать узел дерева, в который можно запихнуть другие объэкти

У меня есть реализация разных деревьев. По заданию мне надо строить дерево из объектов что угодно (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;
            }
        }
    }
    };

А как сделать узел отдельным от моих объектов и пользоваться, обращаться к нему я знаю. Не могли бы вы исправить на этих кусках имея отдельно класс узла или взять несколько файлов из моего гита и исправить в них такую часть, что я смог понять и исправить все остальное?


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