Допустимо ли это дерево B+?
В дереве B+ может ли существовать не-листовой узел, у которого значение ключа удалено? Это означает, что дерево B+ имеет значение в своем промежуточном не листовом узле, но не в любом из его листовых узлов.
Рассмотрим следующую структуру. Я столкнулся с этим, изучая деревья B+. В этой структуре 13 не является конечным узлом. Но это не листовой узел. (На самом деле он был удален в предыдущих инструкциях. Ссылка на картинку . По этой ссылке переходим в нижнюю часть Страница)
Если да, то как происходит удаление данных?
Это ошибка или я что-то упускаю?
1 ответ:
Изображение, которое вы разместили, действительно. Единственное, что возвращает это дерево, - это то, что вы найдете в последней строке. Поскольку
13
был удален из дерева, он был удален из последней строки. Тот факт, что13
существует в не-листовом узле, не имеет никакого значения для ваших результатов, это просто должно быть сопоставимое значение при переходе вниз по дереву. В этом случае дерево не будет вести себя иначе, если13
будет изменено на16
(на основе вышеупомянутого соглашения).Дуглас Фишер сделал исчерпывающий видеоряд о деревьях B+, который может быть легче изучить, чем читать статьи. Часть 1 можно найти здесь.
Edit : мой ответ в комментариях был слишком длинным, поэтому я помещу его здесь. Плюс это полезная информация.
Если вы ищете
12
, и достигнете13
, вы будете сравнивать это12 < 13
или13 <= 12
, левый истинен, поэтому вы перейдете вниз к левому листу. Это произошло бы независимо от того, был ли13
16
, потому что это тоже верно12 < 16
.Если вы ищете
16
и достигаете13
, вы будете сравнивать16 < 13
или13 <= 16
, правильное выражение верно, поэтому вы перейдете вниз к правому листу. Тогда вы найдете значение16
там.Если вы ищете
13
(который не существует), вы спросите, является ли13 < 13
или13 <= 13
, правильное выражение истинно, поэтому вы перейдете к правому листу и обнаружите, что там нет13
, и вы выбьете это укажите, что13
не имеет значения.