Может кто-нибудь сказать мне, что следующие строки делаютфункция Erase в бинарное дерево поиска
else if (obj < retrieve())
{
return (left() == 0) ? 0 : left()->erase(obj, left_tree);
}
else
{
return (right() == 0) ? 0 : right()->erase(obj, right_tree);
}
в блоке кода ниже:
template <typename Comp>
int Binary_search_node<Comp>::erase(Comp const &obj, Binary_search_node<Comp> *&ptr_to_this)
{
if (obj == retrieve()) {
if (leaf()) { // leaf node
ptr_to_this= 0;
delete this;
}
else if (left() != 0 && right() != 0) { // full node
element= right()->front();
right()->erase(retrieve(), right_tree);
}
else { // only one child
ptr_to_this= (left() != 0) ? left() : right();
delete this;
}
return 1;
}
else if (obj < retrieve()) {
return (left() == 0) ? 0 : left()->erase(obj, left_tree);}
else {
return (right() == 0) ? 0 : right()->erase(obj, right_tree);}
}
Дополнительная информация:
1)
front() -- finds the minimum objects
Реализация:
template <typename Comp>
Comp Binary_search_node<Comp>::front() const
{
return(left() == 0) ?retrieve() :left()->front();
}
2)
left() -- returns pointer to left subtree
3)
right() -- returns pointer to right subtree
4)
*ptr_to_this points to current object (same location as what *this points to)
У меня есть идея, что делают линии, но я не уверен на 100%, поэтому я хотел подтвердить. Обратите внимание, что эта функция erase()
предназначена для двоичного дерева поиска. Благодаря!
Не могли бы вы объяснить, что элемент? – Nobody
Элемент - это obj, хранящийся внутри узла дерева B-поиска. – rrazd