LR в деревьях AVL

0

Я просто имел дело с деревьями 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;

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

  • 0
    Используйте отладчик, чтобы решить проблему.
  • 0
    Я сделал, и это показывает то же самое. Я удаляю c -> _ сразу после этой инструкции! :(
Теги:
avl-tree

2 ответа

0
Лучший ответ

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

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню