Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

сиаод / 1-34 / 29. Удаление вершины в АВЛ – дереве

..pdf
Скачиваний:
76
Добавлен:
11.05.2015
Размер:
249.92 Кб
Скачать

29. Удаление вершины в АВЛ – дереве.

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

Как и в случае добавления вершин, введём логическую переменную Уменьшение, показывающую уменьшилась ли высота поддерева. Балансировка идёт, только если Уменьшение = ИСТИНА. Это значение присваивается переменной Уменьшение, если обнаружена и удалена вершина или высота поддерева уменьшилась в процессе балансировки.

Введём две симметричные процедуры балансировки, т. к. они будут использоваться несколько раз в алгоритме удаления:

BL – используется при уменьшении высоты левого поддерева,

BR – используется при уменьшении высоты правого поддерева.

Алгоритм на псевдокоде

BL (p: pVertex, Уменьшение: boolean)

1.IF (p→Bal = -1) p→Bal := 0

2.ELSEIF (p→Bal = 0) p→Bal := 1, Уменьшение := ЛОЖЬ

3.ELSEIF (p→Bal = 1)

1.IF (p→Left→Bal ≥ 0) <RR1-поворот>

2.ELSE <RL - поворот> FI

Алгоритм на псевдокоде

BR (p: pVertex, Уменьшение: boolean)

1.IF (p→Bal = 1) p→Bal := 0

2.ELSEIF (p→Bal = 0) p→Bal := -1, Уменьш := ЛОЖЬ

3.ELSEIF (p→Bal = -1)

4.IF (p→Left→Bal ≤ 0) <LL1 - поворот>

5.ELSE <LR - поворот> FI

6.FI

Алгоритм на псевдокоде

Удаление из АВЛ-дерева (x: Данные, p: pVertex, Уменьшение: boolean)

1.IF (p = NIL) {ключа в дереве нет}

2.ELSE IF (p→Data > x) Удаление (x, p→Left, Уменьшение)

3.IF Уменьшение BL (p, Уменьш) FI

4.ELSE IF (p→Data < x) Удаление (x, p→Right, Уменьшение)

5.IF Уменьшение BR (p, Уменьшение) FI

6.ELSE IF {удаление вершины по адресу p}

7.q := p

8.IF (q→Right = NIL) p := q→Left, Уменьшение := ИСТИНА

9.ELSE IF (q→Left = NIL) p := q→Right, Уменьшение := ИСТИНА

10.ELSE del (q→Left, Уменьшение)

11.IF Уменьшение BL (p, Уменьшение) FI

12.FI

13.dispose(q)

14.FI