Изменения

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

2-3 дерево

609 байт добавлено, 19:32, 11 мая 2015
Удаление элемента
Если у <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>p</tex>. Если p не существует, то оказывается, что мы сейчас удаляем какого-то из сыновей корня (для определенности далее левого, с правым аналогично). Тогда теперь правый сын становится корнем. На этом удаление заканчивается. Если p существует, то удалим <tex>t</tex>, а его брата(<tex>b</tex> перецепим к родителю соседнего листа(обозначим его за <tex>p</tex>). Вызовем Теперь у <tex>p</tex> могло оказаться <tex>4</tex> сына, поэтому повторим аналогичные действия из <tex>\mathtt{updateKeysinsert}(b)</tex> и : вызовем <tex>\mathtt{splitParentupdateKeys}(pb)</tex>, так как у и <tex>\mathtt{splitParent}(p)</tex> могло оказаться <tex>4</tex> сына. Удалим теперь и Теперь рекурсивно удалим <tex>\mathtt{t.parent}</tex>.  После возврата из рекурсии обновим все ключи с помощью <tex>\mathtt{updateKeys()}</tex>, запустившись от <tex>b</tex>.
[[Файл:23treedelete.png|thumb|center|Удаление элемента с ключом 2|1150px]]
Анонимный участник

Навигация