Im изучение B дерева и в книге они сказали, что:B-tree: удалить нелистовой узел?
Если ключ к находится в узле х и х представляет собой лист, удалить ключ к от х.
Если ключ k находится в узле x и x является внутренним узлом, выполните следующие действия.
a. Если дочерний y, который предшествует k в узле x, имеет не менее t ключей, тогда найдите предшественник k 'k в поддереве, укорененном в y. Рекурсивно удалим k 'и заменим k на k' по x. (Поиск k 'и его удаление могут выполняться в одном проходе вниз.)
b. Симметрично, если дочерний z, следующий за k в узле x, имеет не менее t ключей, затем найдите преемника k 'k в поддереве, корневом в z. Рекурсивно удалим k 'и заменим k на k' по x. (Поиск k 'и его удаление могут выполняться в одном проходе вниз.)
c. В противном случае, если оба y и z имеют только t-1 ключей, объедините k и все z в y, так что x теряет и k, и указатель на z, а y теперь содержит 2t-1 ключей. Затем, свободный z и рекурсивно удаляем k из y.
Мой вопрос в том, что в случае 2.a. Может ли кто-нибудь объяснить мне пример: рекурсивно удалить k 'и заменить k на k' в x.
С уважением.
Отличное описание. Вставка и особенно удаление в B-деревья может быть очень сложной процедурой, включающей «перекатывание» многих узлов вверх и вниз по дереву. Алгоритмы значительно усложняются желанием * держать * дерево более или менее «в балансе» все время. Поэтому вставка и удаление являются очень дорогостоящими операциями, поэтому поиски остаются неизменно быстрыми. –
Откуда у вас 40? Это было не там, когда вы начали удалять 49 ... – DarthGizka
40 является 'k'', предшественником' k', не показано на диаграмме, но это самый правый ключ 'y', предположительно в некоторых из Дети 'y' (комментарий в скобках в ответе). – karastojko