我正在实现一个Red black Tree,其中insert函数应该有两个模板,一个用于项目,另一个用于键。我以这种方式传递插入函数中的参数:
template <class Item, class Key>
void RedBlackTreeNode<Item, Key>::InsertKey(const Item *&T, const Key *&z)
我试图在第二个参数中传递一个数组(由随机元素组成),这样:
const int* pointer = &arr[i];
t1.InsertKey(//something else here// , pointer); //insert the tree and the node
但是,为了在红黑树中插入元素,我无法弄清楚要传递的内容作为第一个参数。第一个参数代表什么?我试图以这种方式传递树的根:
Node<int, int> n1;
t1.InsertKey(n1->root, pointer);
不幸的是,这不起作用。请帮忙吗?
提前致谢。
答案 0 :(得分:1)
如果你正在实现一个红黑树(或者甚至只是一棵二叉树),你就是插入方法,只需将元素作为参数插入即可。您正在插入一个可以与另一个项目进行比较的Item
,但没有Key
的概念。如果您要创建Key
/ Value
容器,则可以只使用std::pair<Key, Value>
项并在item.first
上进行比较,或类似的内容。
以下是binary search tree插入代码的模拟。你可以从那开始添加[红黑树插入(http://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Insertion)必须保留的属性:
template <class Item>
void BinarySearchTreeNode<Item>::Insert(Item item)
{
if (item < this->item)
{
if (this->leftChild == nullptr)
this->leftChild = new BinarySearchTreeNode(item);
else
insert(this->leftChild, item);
}
else
{
if (this->rightChild == nullptr)
this->rightChild = new BinarySearchTreeNode(item);
else
insert(this->rightChild, item);
}
}
这里有一个示例用法(假设其余的实现已经完成):
BinarySearchTree<int> tree;
tree.Insert(1); // Call insert on root node