Изменения

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

AA-дерево

4 байта убрано, 01:43, 20 декабря 2017
Удаление вершины
=== Удаление вершины ===
Как и в большинстве сбалансированных бинарных деревьев, удаление внутренней вершины можно заменить на удаление листа, если заменить внутреннюю вершину на ее ближайшего «предшественника» или «преемника», в зависимости от реализации. «Предшественник» находиться находится в начале последнего левого ребра, после которого идут все правые ребра. По аналогии, «преемник» может быть найден после одного правого ребра и последовательности левых ребер, пока не будет найден указатель на NULL. В силу свойства всех узлов уровня более чем <tex>1</tex>, имеющих двух детей, предшественник или преемник будет на уровне <tex>1</tex>, что делает их удаление тривиальным. Ниже представлена рекурсивная реализация алгоритма.
Будем использовать дополнительную функцию <tex>\mathrm{decreaseLevel}</tex>, она будет обновлять уровень вершины, которую передают в функцию, в зависимости от значения уровня дочерних вершин.
'''else''' '''if''' t.left == <tex>\varnothing</tex>
l = successor(t)
t.right = delete(value(l).valuel, t.right)
t.value = l.value
'''else'''
l := predecessor(t) t.left = delete(l.value, t.left))
t.value = l.value
<font color=green>// Сбалансируем дерево. Если необходимо, уменьшим поля «уровень»
Анонимный участник

Навигация