Как разделить узел при вставке в дерево 2-3-4?

Есть ли правило, как разделить узел в дереве 2-3-4?

Например. Если я вставлю 3, 7, 4, 9 в дерево 2-3-4:

Будет ли он разделен так (желтый) или так (зеленый), как показано здесь:

введите здесь описание изображения

Оба действительны?


person user963241    schedule 17.02.2017    source источник


Ответы (1)


Зеленый. Вам необходимо рассмотреть шаги алгоритма. Посетите страницу Википедии. для шагов вставки. Ключевая часть состоит в том, чтобы разделить 4-узел (который имеет 3 значения), переместив среднее значение на уровень выше, прежде чем рассматривать следующую вставку.

1. Insert 3 into blank. Result: 3         (a 2-node)
2. Insert 7.            Result: 3 - 7     (a 3-node)
3. Insert 4.            Result: 3 - 4 - 7 (a 4-node)
5. Insert 9. There is already a 4-node, so this must be split.
   The split will be to move 4 up a level, and 3 and 7 are now child nodes of 4
   (like your green diagram). 9 is then added next to the 7.
person G42    schedule 17.02.2017
comment
Но в случае 2-3 деревьев мы разделяем после вставки значения. Так, что середина становится корневым значением. Значит, в случае 4-х узлов будет по-другому? - person user963241; 17.02.2017
comment
С деревом 2-3 у вас есть 2 значения при работе с 3 узлами, поэтому среднего значения нет. Это не ваза с 2-3-4 деревьями. На самом деле я видел несколько алгоритмов, которые вставляют значение, а затем разбивают его на дерево 2-3-4, поэтому похоже, что оба действительны. - person G42; 17.02.2017
comment
На самом деле другой метод также использовал разделение перед вставкой. - person G42; 17.02.2017