

36 Удаление элемента в 2 – 3 дереве.
При удалении ключа из узла возникают три варианта.
1)Если после удаления ключа в узле содержится два ключа, то после удаления ничего не меняется.
2)Если же у ключа после удаления остался один элемент, то проверяем количество потомков второго ребенка того узла, ребенком которого является узел с удаляемым ключом. Если у него два ребенка, то присваиваем ему оставшийся один элемент. Вершину, оставшуюся без детей, удаляем рекурсивно.
3)Иначе у него три ребенка. Тогда присваиваем узлу с одним ключом один из этих ключей, таким образом получая два узла с двумя ключами.
Алгоритм delete(R,K):
1.Найти позицию удаляемого элемента по ключу К
2.if элемент не лист then
3.Поменять его со следующим по значению
4.endif
5.Удалить элемент из листа
6.if лист-пустой then fix(лист);
Алгоритм fix(n):
1.if (n-корень) then
2.удаляем его
3.else
4.Установить p на родительский узел
5.if брат имеет 2 ключа then
6.Перераспределить элементы между братом, родителем и листом.
7.if (n - внутренний узел) then
8.Переместить одного из сыновей от брата к узлу n.
9.else
10.Установить S на брата узла n.
11.Переместить ключ из p в S
12.if (n-внутренний узел) then
13.присоеденить дочерний узел узла n к S
14.удалить узел n
15.if (p - пуст) then then fix(p)
16.endif
17.endif