LR в деревьях AVL

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

void LR (Node* &c)
{
if (c->_parent != 0)
{
if ( c == c->_parent->_left)
{
c->_parent->_left = c->_right;
}
else
c->_parent->_right = c->_right;
c->_right->_parent = c->_parent;
}
etc. etc.

Итак, когда у меня есть узел c, у которого есть ключ 389, родительский ненулевой и правый дочерний тоже ненулевой, с ключом, равным 390, мой код сбрасывается, и он говорит, что сразу после этого instr .:

    c->_parent->_left = c->_right;

мой правый ребенок, с -> _ право становится нулевым: / я не понимаю. Кто-нибудь?

0

Решение

Если используется отладчик c не ноль И c->right не равен нулю в тот момент, когда программа получает ошибку сегментации, затем проверьте, что отлаживаемая программа скомпилирована правильно.

Следите за соответствующими переменными для изменения значения и переходите, пока переменная не станет действительной.

0

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

Мой параметр функции LR был ссылкой, поэтому я потерял адреса: D c -> _ parent -> _ left получил то же самое, что и c: D, поэтому я в основном сделал это: c = c -> _ right: D Это работает теперь, когда я это исправил.

0

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