Как реализовать шаблон во вложенных классах? - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь реализовать двоичное дерево, используя следующий код, я хочу автоматически создать узел типа, переданного внутри двоичного дерева, но я просто не могу понять, как это сделать. Пожалуйста помоги. Спасибо

template <typename X>
class binaryTree{
  template <typename X>
  class node{
    X data;
    node<X>* left;
    node<X>* right;
 };
};

1 Ответ

0 голосов
/ 05 мая 2020

Второй template <typename X> вам не нужен. Также вы можете рассмотреть возможность удаления указателя left и right в деструкторе, если каждый узел владеет своим левым и правым узлами.

#include <iostream>

template <typename X>
class binaryTree
{
public:

    class node
    {

    public:

        X data;
        node *left;
        node *right;

        ~node()
        {
            delete left;
            delete right;
        }
    };

    node root;
};

int main()
{
    binaryTree<int> tree{
        binaryTree<int>::node{ 
            1,
            new binaryTree<int>::node {2, nullptr, nullptr},
            new binaryTree<int>::node {3, nullptr, nullptr}
        }
    };

    auto& root = tree.root;
    std::cout << root.data << '\n' << root.left->data << '\n' << root.right->data << '\n';
}

Вывод:

1
2
3
...