О бинарных вращениях деревьев
Я пытаюсь запрограммировать AVL на паскале. Я уже запрограммировал обычное двоичное дерево, и оно работает, я пытаюсь создать самобалансируемое дерево, и я столкнулся с проблемой.
У меня есть поддерево, которое я хочу повернуть, и дело в том, что я не знаю, как назначить родителя указателя корневого узла поддерева. Имеется в виду следующее дерево: корневой узел поддерева, которое я хочу повернуть = 30 родительский узел поддерева = 55
55 55
30 60 -----> 45 60
10 45 75 30 50 75
5 15 50 90 10 90
5 15
как я должен изменить указатель, который идет от 55 до 30, чтобы перейти от 55 до 45? Большая часть кода, который я видел, не имеет указателя, который идет от узла к его родителю, поэтому я не знаю, как его изменить.
1 ответ
Вы не показываете никакого кода, но обычно вы делаете что-то вроде
Root := Root.Rebalance;
То есть, вы вызываете поддерево для перебалансировки себя, и эта функция перебалансировки возвращает корень в качестве результата. Этот результат может иметь тот же корень, что и ранее, или - как в вашем сценарии - новый корневой узел.