Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中实现具有添加和删除节点功能的模板二叉搜索树+;_C++_Templates_Tree_Binary Tree_Binary Search Tree - Fatal编程技术网

C++ 在C+中实现具有添加和删除节点功能的模板二叉搜索树+;

C++ 在C+中实现具有添加和删除节点功能的模板二叉搜索树+;,c++,templates,tree,binary-tree,binary-search-tree,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 = new

我创建了一个带有函数的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);
    }
}
模板
void树::addNode(节点*&movingPtr,T newItem)
{
if(movingPtr==NULL)
{
movingPtr=新节点;
movingPtr->data=newItem;
movingPtr->prev=NULL;
movingPtr->next=NULL;
}
其他的
{
如果(移动PTR->数据>新建项目)
addNode(movingPtr->prev,newItem);
其他的
addNode(movingPtr->next,newItem);
}
}
如果有人知道我在哪里可以找到实现的模板类,请告诉我。我犯了什么错误?我知道模板的基础知识,但是关于更高级的模板使用的信息很少,这些信息清楚地解释了如何实现模板类和函数。

(1)节点应该是模板

template <typename T>
struct Node
{
    T data;
    Node *prev;
    Node *next;
};
模板
结构体类型
{
T数据;
节点*prev;
节点*下一步;
};
(2) 类应该是模板类

template <typename T>
class Tree{
public:
    void addNode(Node<T>*& movingPtr, T newItem);
};
模板
类树{
公众:
void addNode(Node*&movingPtr,T newItem);
};
(3) 使用模板类型创建节点

movingPtr = new Node<T>;
movingPtr=新节点;
您可以尝试下面的整个测试代码:

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;
}
模板
结构体类型
{
T数据;
节点*prev;
节点*下一步;
};
模板
类树{
公众:
void addNode(Node*&movingPtr,T newItem);
};
模板
void树::addNode(节点*&movingPtr,T newItem)
{
if(movingPtr==NULL)
{
movingPtr=新节点;
movingPtr->data=newItem;
movingPtr->prev=NULL;
movingPtr->next=NULL;
}
其他的
{
如果(移动PTR->数据>新建项目)
addNode(movingPtr->prev,newItem);
其他的
addNode(movingPtr->next,newItem);
}
}
int main()
{
Node*n1=新节点();
n1->data=2;
树t;
t、 addNode(n1,1);
t、 addNode(n1,3);
返回0;
}