Ниже приведен код, который я написал для вставки узла в Дерево простого двоичного поиска. Теперь я пытаюсь реализовать Red Black Tree, наследуя тот же класс Node в класс RBNode.Использование Inheritence эффективно в C++
void Node::insert_node(Tree *t)
{
Node *cur_node = t->get_root();
Node *prev_node;
while(NULL != cur_node)
{
prev_node = cur_node;
if(this->data < cur_node->data)
{
cur_node = cur_node->left;
}
else
{
cur_node = cur_node->right;
}
}
if(NULL == t->get_root())
{
cur_node = this;
t->set_root(cur_node);
}
else
{
if(this->data < prev_node->data)
{
prev_node->left = this;
}
else
{
prev_node->right = this;
}
this->parent = prev_node;
}
}
Эта функция будет оставаться одинаковой для RBNode, за исключением того, что узел * следует заменить RBNode * и дерево * заменяется RBTree *. Я думаю, что бесполезно писать ту же функцию в классе RBNode, которая по сути делает то же самое. Если я использую одну и ту же функцию, я не могу получить доступ к членам RBNode, так как то, что я вставил в Дерево, является узлом.
Каков эффективный способ достижения этого. Я новичок в C++, поэтому, если я пропустил что-то очевидное, сообщите мне.
Если вы нацелены на максимальную эффективность, структура данных, подобная этой, включает в себя много рывков, которые могут привести к большому количеству промахов в кэше. Более смежная структура данных, такая как дерево B +, вероятно, будет быстрее. Кроме того, в зависимости от ваших фактических типичных данных вам может даже не понадобиться дерево. –