Кодирование функции удаления() для двоичного дереваC++

Программы на C++. Форум разработчиков
Anonymous
Кодирование функции удаления() для двоичного дерева

Сообщение Anonymous »

Я изучаю структуры данных, и нам нужно написать двоичное дерево (а не двоичное дерево поиска). У меня работает около 90%, но у меня возникли проблемы с работой функции удаления().

Для справки: мы создаем класс BinaryTree, который должен имеют следующие функции

Код: Выделить всё

template 
class BinaryTree {
private:
std::shared_ptr rootptr;

protected:
// Removes the target value from the tree
virtual std::shared_ptrisLeaf()) {
if(subTreePtr->getLeftChildPtr()) {
subTreePtr->setItem(subTreePtr->getLeftChildPtr()
->getItem());
moveValuesUpTree(subTreePtr->getLeftChildPtr());
} else if(subTreePtr->getRightChildPtr()) {
subTreePtr->setItem(subTreePtr->getRightChildPtr()
->getItem());
moveValuesUpTree(subTreePtr->getRightChildPtr());
} // end if
} // end if
} // end if
return subTreePtr;
} // end moveValuesUpTree
Эта функция перемещает значения вверх по дереву. Я думал, что при кодировании функции RemoveValue() я мог бы просто переместить значение узла, который хочу удалить, в нижнюю часть дерева, а затем удалить его (таким образом, это всегда лист, и вам не нужно беспокоиться о повторное подключение любых узлов), но функции moveValuesUpTree стирают значение, от которого я хочу избавиться. Есть ли способ сохранить это значение в рекурсивной функции moveValuesUpTree выше, а затем сохранить его в листе? Или есть лучший способ использовать два защищенных метода вместе для удаления значения?

Спасибо!

Изменить: функция moveValuesUpTree не удаляет узел, а только его значение. Так, например, вызов moveValuesUpTree(2) для дерева, вывод которого (постпорядок) равен 74625381, будет равен 77645831.

Подробнее здесь: https://stackoverflow.com/questions/585 ... inary-tree

Вернуться в «C++»