Изменения

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

B-дерево

74 байта добавлено, 20:53, 17 мая 2011
Удаление ключа
== Удаление ключа ==
# Находим узел, содержащий ключ, который необходимо удалить.# Если узел является листом и корнем одновременноудаление происходит из листа, удаляем из него ключсмотрим на количество ключей в нем.# Если узел является листомключей больше t - 1, то просто удаляем из него ключ.## Если в узле осталось меньше <tex>В противном случае, если существует соседний лист, который содержит больше t - 1</tex> ключей.### Если у узла есть следующий брат и в нем не менее <tex>t</tex> ключейключа, добавляем в узел удалим ключ из родителяисходного узла, находящийся между ним и следующим сыном, а на его место ставим первый поставим ключ брата.### Если у узла есть предыдущий брат и в нем не менее <tex>t</tex> ключей, добавляем в узел ключ из родителя, находящийся -разделитель между ним исходным узлом и предыдущим сыномего соседом, а на его место ставим поставим первый, если сосед правый, или последний , если сосед левый, ключ братасоседа.### Если у братьев меньше <tex>все соседи содержат по t</tex> ключей- 1 ключу, то объединяем узел с предыдущим или следующим братом каким-либо из соседей, удаляем ключ и добавляем ключ-разделитель между узлами в получившийся объединенный узел ключ из родителя, разделявший узлы. Если у родителя в родительском узле осталось менее <tex>меньше t - 1</tex> ключей и родитель не является корнемключа, переходим к пункту 3.1аналогичным образом добавляем в него ключи из соседей или объединяем узел в ними.# Если узел удаление происходит не является листомиз листа, удаляем самый левый ключ из него поддерева следующего дочернего узла или самый правый из поддерева предыдущего дочернего узла и ставим удаленный ключ, а на его место ставимудаляемого ключа в исходном узле.
Анонимный участник

Навигация