Я пытался реализовать функцию удаления двоичного дерева поиска, но не смог заставить его работать во всех случаях.Удаление двоичного дерева дерева поиска
Это моя последняя попытка:
Node* RBT::BST_remove(int c)
{
Node* t = get_node(c);
Node* temp = t;
if(t->get_left() == empty)
*t = *t->get_left();
else if(t->get_right() == empty)
*t = *t->get_right();
else if((t->get_left() != empty) && (t->get_right() != empty))
{
Node* node = new Node(t->get_data(), t->get_parent(), t->get_colour(), t->get_left(), t->get_right());
*t = *node;
}
return temp;
}
Node* RBT::get_node(int c)
{
Node* pos = root;
while(pos != empty)
{
if(c < pos->get_data())
pos = pos->get_left();
else if(c == pos->get_data())
return pos;
else
pos = pos->get_right();
}
return NULL;
}
т является узлом и пустым просто узел с чем в нем.
Я просто пытаюсь поменять значения, но получаю ошибку времени выполнения. Есть идеи?
Редактировать: Я возвращаю temp, чтобы удалить его впоследствии.
Благодаря
Тэг вопрос в качестве домашнего задания, если это домашнее задание вопрос, пожалуйста. – wilhelmtell
Предполагалось, что я создаю двоичное дерево поиска, поэтому я не уверен, но каждый узел на этом дереве может иметь не более двух детей. – doc
Можете ли вы полностью опубликовать функцию 'remove()'? – wilhelmtell