Изменения

Перейти к: навигация, поиск

2-3 дерево

55 байт добавлено, 22:26, 10 мая 2015
Удаление элемента
*<tex>x</tex> {{---}} значение удаляемого узла,
*<tex>t</tex> {{---}} текущий узел.
Пусть изначально <tex>t = \mathtt{search(x)}</tex> {{---}} узел, где находится <tex>x</tex>.
Если у <tex>t</tex> не существует родителя, то это корень. Удалим его.
Если у <tex>t</tex> существует родитель, и у него <tex>3 </tex> сына, то просто удалим <tex>t</tex>. Обновим ключи, запустив <tex>\mathtt{updateKeys}</tex> от любого брата <tex>t</tex>.
Если у родителя(<tex>\mathtt{t.parent}</tex>) <tex>2 </tex> сына, то удалим <tex>t</tex>, а его брата(<tex>b</tex> перецепим к родителю соседнего листа(обозначим его за <tex>p</tex>). Вызовем <tex>\mathtt{updateKeys}(b)</tex> и <tex>\mathtt{splitParent}(p)</tex>, так как у <tex>p</tex> могло оказаться <tex>4 </tex> сына. Удалим теперь и <tex>\mathtt{t.parent}</tex>. После возврата из рекурсии обновим все ключи с помощью <tex>\mathtt{updateKeys()}</tex>, запустившись от <tex>b</tex>.
[[Файл:Treedelete.png|border|1150px]]
Анонимный участник

Навигация