【发布时间】:2011-11-19 03:55:50
【问题描述】:
所以我想编写一个代码,它创建一个二叉树,它保存数据,例如像 1,6,2,10,8 这样的整数,在弹出时我得到最大的数字,然后它被删除树,并且在推送时我可以插入一个新元素。这应该在模板中,这样我就可以轻松更改要在树中保存的数据类型。现在我得到了树到目前为止,没有模板它工作得很好,我可以添加项目,我可以打印它们,但是当我尝试将它放入模板时,我收到以下错误:使用类模板需要模板参数列表。可能是什么问题呢?也许我做错了。欢迎提出任何建议。
这是我的第一个问题,它由 avakar ty 解决。 (我将在我的问题末尾发布代码)
我刚刚阅读了项目请求之类的内容,我必须在问题的第一部分描述的上面做这个事情,但它就像二叉树应该代表一个优先级队列。这就是为什么在请求中我必须使用 push 按优先级顺序将新元素放入树中,并且使用 pop 我将获得具有最高优先级的元素,然后该元素将被删除。那么我怎么能将我的树用作优先队列,或者他已经是一个(我认为不是,但谁知道)?我希望我能解释一下。
这是承诺的代码:
#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<int>();
myBT->AddItem(1);
myBT->AddItem(7);
myBT->AddItem(1);
myBT->AddItem(10);
myBT->AddItem(4);
myBT->PrintTree();
}
【问题讨论】:
-
对不起,我投票结束这个问题。随意转发任何特定代码问题或关于 BST 作为优先级队列的问题。
-
嗯... C++ 标准库将优先级队列实现为 堆 而不是树。我想自平衡树也可以达到同样的目的,尽管树在叶子节点而不是根节点中有极端元素。
标签: c++ templates binary-tree priority-queue