Я просто имел дело с деревьями 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:/Я не понимаю. Кто-нибудь?
Мой параметр функции LR был ссылкой, поэтому я потерял адреса: D c-> _ parent → _ left получил то же самое, что и c: D, поэтому я в основном сделал это: c = c-> _ right: D Сейчас он работает, и я его исправил.
Если использование отладчика c
не равно нулю, а c->right
не равно нулю в точке, в которой программа получает ошибку сегментации, тогда проверьте, правильно ли вы отлаживаете отлаженную программу.
Наблюдайте за соответствующими переменными для изменения значения и пройдите до тех пор, пока переменная не станет действительной.