Я пытаюсь реализовать AVL-Tree на С++. Пока вставка и балансировка дерева работают просто отлично. Алгоритм, который я пытаюсь реализовать:
шаг 1: удалить/вставить нужный узел, как в BST.
шаг 2: сбалансируйте дерево из того же курса вставки/удаления.
Я хочу разделить его на два этапа, чтобы его не было сложно читать и программировать. проблема связана с шагом 2, «вставка» работает нормально, потому что я могу просто найти в дереве существующий узел, а затем использовать рекурсию для обновления курса, через который он прошел.
но при удалении, так как узел уже удален, я не могу найти маршрут, по которому он прошел на шаге 1.
Я думал о вставке преемника, но мне не повезло, я бы очень хотел сохранить его с двумя шагами, хотя все реализации, которые я видел в Интернете, объединяли оба шага.