使用C ++中的Add和Delete节点函数实现模板二叉搜索树

时间:2015-04-03 08:35:21

标签: c++ templates tree binary-tree binary-search-tree

我创建了一个带有函数的bst类,但现在我想让它使用模板。这是我的代码到目前为止添加一个节点,这是行不通的。

 template <typename T>
void Tree<T>::addNode(Node<T>*& movingPtr, T newItem)
{
    if (movingPtr == NULL)
    {
        movingPtr = new Node;
        movingPtr -> data = newItem;
        movingPtr -> prev = NULL;
        movingPtr -> next = NULL;
    }
    else
    {
        if (movingPtr -> data > newItem)
            addNode(movingPtr -> prev, newItem);
        else
            addNode(movingPtr -> next, newItem);
    }
}

如果有人知道我在哪里可以找到已实现的模板类,请告诉我们。我犯了什么错误?我知道模板的基础知识,但是关于更高级的模板使用的信息很少,这清楚地解释了如何实现模板类和函数。

1 个答案:

答案 0 :(得分:1)

(1)节点应为模板

template <typename T>
struct Node
{
    T data;
    Node *prev;
    Node *next;
};

(2)类应为模板类

template <typename T>
class Tree{
public:
    void addNode(Node<T>*& movingPtr, T newItem);
};

(3)使用模板类型

创建节点
movingPtr = new Node<T>;

您可以尝试下面的整个测试代码:

template <typename T>
struct Node
{
    T data;
    Node *prev;
    Node *next;
};

template <typename T>
class Tree{
public:
    void addNode(Node<T>*& movingPtr, T newItem);
};

template <typename T>
void Tree<T>::addNode(Node<T>*& movingPtr, T newItem)
{
    if (movingPtr == NULL)
    {
        movingPtr = new Node<T>;
        movingPtr->data = newItem;
        movingPtr->prev = NULL;
        movingPtr->next = NULL;
    }
    else
    {
        if (movingPtr->data > newItem)
            addNode(movingPtr->prev, newItem);
        else
            addNode(movingPtr->next, newItem);
    }
}


int main()
{
    Node<int> *n1 = new Node<int>();
    n1->data = 2;

    Tree<int> t;
    t.addNode(n1, 1);
    t.addNode(n1, 3);

    return 0;
}