Я реализую Red Black Tree, где функция вставки должна иметь два шаблона, один для элемента, а другой для ключа. Я передаю параметры в функции вставки следующим образом:
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);
К сожалению, это не работает. Любая помощь, пожалуйста?
Заранее спасибо.
Если вы реализуете красное черное дерево (или просто просто двоичное дерево), вы используете метод вставки, чтобы вставить элемент в качестве параметра. Вы вставляете один Item
который можно сравнить с другим элементом, нет понятия Key
. Если вы хотите создать контейнер Key
/Value
, вы можете просто взять элемент std::pair<Key, Value>
и сравнить item.first
или что-то вроде этого.
Вот макет кода для вставки двоичного дерева поиска. Вы можете начать с этого, чтобы добавить свойства, которые необходимо сохранить для [вставки красного черного дерева (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