Кодирование функции удаления() для двоичного дерева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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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