Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

сиаод / 35-66 / 36 Удаление элемента в 2 – 3 дереве

..pdf
Скачиваний:
72
Добавлен:
11.05.2015
Размер:
253.21 Кб
Скачать

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