Удалить родителя из дерева AVL

Я застрял в этой части моего задания по кодированию, касающегося деревьев AVL. Мы должны удалить участников из дерева AVL. Я был в состоянии разобраться со всеми другими случаями удаления листьев с дерева. Моя проблема заключается в том, что делать при удалении головного листа (или родительского?) Дерева.

Чтобы было проще, я пытаюсь удалить B из дерева. В структуре моего класса у меня есть доступ к родителю и левому и правому ребенку.

   B
/ \
A   C

У меня есть метод, который вычисляет предшественник, который в этом случае является А. Узел — это узел, который должен быть удален (B) Оттуда я пробую этот код, но продолжаю получать ошибки сегмента. Это следует общему коду, который я использовал для удаления других листьев в дереве.

successor->right = node->right;
node->right->parent = successor;
successor->parent = NULL;
node = NULL;
delete node;

0

Решение

Начнем с того, что следующие две строки не имеют особого смысла в том порядке, в котором вы их написали:

node = NULL;
delete node;

Удаление NULL — пустая операция. Вы, вероятно, намеревались переключить эти строки. Что касается вашего segfault, я не вижу в коде, который вы опубликовали, ничего такого, что могло бы вызвать сбой; это, вероятно, происходит в другом месте кода.

Для удаления AVL Есть ряд полезных уроков. Страница википедии на деревьях AVL содержит пошаговые инструкции по обработке удаления. Мне также понравилось читать учебник по Вечно Смущенный. Есть еще куча, которые Google найдет. Кроме того, обратитесь к своему тексту, если у вас есть.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector