C ++ Домашнее задание - Справка по бинарному дереву поиска - PullRequest
3 голосов
/ 06 декабря 2010

Для начала это домашняя работа, мне просто очень нужна помощь с бинарным деревом поиска.

Программа предназначена для отображения полиморфизма, используя person в качестве абстрактного базового класса и других типов людей, которые наследуют Person.У каждого человека есть фамилия, и я пытаюсь использовать бинарное дерево поиска для алфавитного расположения людей по фамилии.

Я написал то, что, по моему мнению, должно быть приемлемым деревом бинарного поиска, но я все еще получаюошибки.Двоичное дерево поиска должно иметь только функцию вставки и перемещения.Который должен быть рекурсивным.

Я получаю ошибку: Ошибка 19, ошибка C4430: отсутствует указатель типа - предполагается, что bst.cpp

Это происходит в строках 51, 64 и 70. Вот мой код:

Заголовочный файл:

#ifndef BST_H
#define BST_H

template <class T>
class BST
{
    private:
        class BinNode
        {
            public:
                BinNode(void);
                BinNode(T node);

                BinNode *left;
                BinNode *right;
                T data;
        };

        BinNode* root;

    public:
        BST();   
        ~BST();

        void insert(const T &);
        void traverse();
        void visit(BinNode *);


    //Utlity Functions
    private:
        void insertAux(BinNode* &, BinNode *);
        void traverseAux(BinNode *, ostream &);
};

#include "BST.cpp"
#endif

Файл реализации:

 #include <iostream>
#include <string>

using namespace std;

#ifdef BST_H

template <class T>
BST<T>::BinNode::BinNode()
{
    left = right = 0;
}

template <class T>
BST<T>::BinNode::BinNode(T node)
{
   left = right = 0;
   data = node;
}

template <class T>
BST<T>::BST()
{
    root = 0;
}

template <class T>
void BST<T>::insertAux(T i, BinNode* &subRoot)
{
    //inserts into empty tree
    if(subRoot == 0)
        subRoot = new BinNode(i);
    //less then the node
    else if(i<subRoot->data)
        insertAux(i, subRoot->left);
    //greater then node
    else
        insertAux(i, subRoot->right);
}

template <class T>
void BST<T>::insert(const T &i)
{
    insertAux(T i, root)
}

template <class T>
BST<T>::traverse()
{
    traverseAux(root);
}

template <class T>
BST<T>::traverseAux(BinNode *subRoot)
{
    if (subRoot == 0)
        return;
    else
    {
        traverseAux(subRoot->left);
        visit(subRoot);
        traverseAux(subRoot->right);
    }       
}

template <class T>
BST<T>::visit(BinNode *b)
{
    cout << b->data << endl;
}

#endif

Если кто-нибудь может быстро взглянуть на это дляи дать мне несколько советов?Это действительно смущает меня прямо сейчас.Спасибо!

Ответы [ 2 ]

3 голосов
/ 06 декабря 2010

В некоторых определениях функций вы не указали тип возвращаемого значения.

Например:

template <class T>
BST<T>::traverse()
{
    traverseAux(root);
}

должно быть:

template <class T>
void BST<T>::traverse()
{
    traverseAux(root);
}
1 голос
/ 06 декабря 2010

Вы должны изменить BST<T>::traverse() на void BST<T>::traverse()

Аналогично с другими ошибками.

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