286
правок
Изменения
Нет описания правки
Напишем вспомогательную функцию, которая будет возвращать лист, в котором должен находится переданный ей ключ. Определяем интервал и переходим к соответствующему сыну. Повторяем пока не дошли до листа.
'''Node''' find_leaf(T: '''BPlusTree''', kkey: '''int'''):
now = T.root
'''while''' !now.leaf
'''for''' i = 0 '''to''' now.key_num
'''if''' i == now.key_num '''or''' key < now.key[i]
now = now.chchild[i]
'''break'''
'''return''' now
++leaf.key_num
'''if''' leaf.key_num == 2 * t <span style="color:#008000"> // t {{---}} степень дерева</span>
split(T, leaf) <span style="color:#008000"> // Разбиваем узел</span>
'''return true'''
'''return false'''
'''else'''
delete_in_node(leaf, key) <span style="color:#008000"> // Удалить ключ из вершины</span>
'''return true'''
left_sibling.child[left_sibling.key_num + 1] = tec.child[tec.key_num]
update(left_sibling)
delete_in_node(left_sibling.parent, max_key(left_sibling)) <span style="color:#008000"> // Удаляем разделительный ключ в отце</span>
'''else'''
++tec.key_num
tec.child[tec.key_num + 1] = right_sibling.child[right_sibling.key_num]
update(tec) delete_in_node(tec.parent, max_key(tec)) '''if''' T.root.key_num == 1 T.root = T.root.child[0]
== Примeчания ==
<references/>