Двоичное дерево в шаблоне - PullRequest
4 голосов
/ 18 ноября 2011

, поэтому я хочу создать код, который создает двоичное дерево, которое содержит данные, например, целые числа типа 1,6,2,10,8, а при популярности я получаю наибольшее число, и после этого оно удаляется из дерево, и на толчок я могу вставить новый элемент. И это должно быть в шаблоне, чтобы я мог легко изменить тип данных, которые я хочу сохранить в дереве. Теперь у меня есть дерево, без шаблона оно работает нормально, я могу добавлять элементы и печатать их, но когда я пытаюсь поместить его в шаблон, я получаю следующую ошибку: использование класса Для шаблона требуется список аргументов шаблона . В чем может быть проблема? Может быть, я делаю это совершенно неправильно. Любые предложения приветствуются.

Я получил следующий код:

#include <iostream>


using namespace std;


template<class T>
class BinaryTree
{
struct Node
    {
        T data;
        Node* lChildptr;
        Node* rChildptr;

        Node(T dataNew)
        {
            data = dataNew;
            lChildptr = NULL;
            rChildptr = NULL;
        }
    };
private:
    Node* root; 

        void Insert(T newData, Node* &theRoot)
        {
            if(theRoot == NULL)
            {
                theRoot = new Node(newData);
                return;
            }

            if(newData < theRoot->data)
                Insert(newData, theRoot->lChildptr);
            else
                Insert(newData, theRoot->rChildptr);;
        }

        void PrintTree(Node* theRoot)
        {
            if(theRoot != NULL)
            {
                PrintTree(theRoot->lChildptr);
                cout<< theRoot->data<<" ";;
                PrintTree(theRoot->rChildptr);
            }
        }

    public:
        BinaryTree()
        {
            root = NULL;
        }

        void AddItem(T newData)
        {
            Insert(newData, root);
        }

        void PrintTree()
        {
            PrintTree(root);
        }
    };

    int main()
    {
        BinaryTree<int> *myBT = new BinaryTree();
        myBT->AddItem(1);
        myBT->AddItem(7);
        myBT->AddItem(1);
        myBT->AddItem(10);
        myBT->AddItem(4);
        myBT->PrintTree();
    }

1 Ответ

5 голосов
/ 18 ноября 2011

в выражении

new BinaryTree()

идентификатор BinaryTree - это шаблон, а не класс. Вы, вероятно, имели в виду

new BinaryTree<int>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...