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

сиаод / 1-34 / 27. АВЛ – деревья. Свойства. Вращение. Высота АВЛ-дерева (теорема)

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

27. АВЛ – деревья. Свойства. Вращение. Высота АВЛ-дерева (теорема)

Дерево поиска называется АВЛ – деревом, если для каждой его вершины высоты левого и правого поддеревьев отличаются не более чем на 1.

Высота AVL-деревьев оценивается сверху логарифмически в зависимости от числа вершин: h <= C log2 n .

Высота лежит в диапазоне от log2(n + 1) до 1.44 log2(n + 2)

Повороты при балансировке

r – корень АВЛ-дерева, у которого имеется левое поддерево (ТL) и правое поддерево (TR). Если добавление новой вершины в левое поддерево приведет к увеличению его высоты на 1, то возможны три случая:

1)если hL = hR, то ТL и TR станут разной высоты, но баланс не будет нарушен;

2)если hL < hR, то ТL и TR станут равной высоты, т. е. баланс даже улучшится;

3)если hL > hR, то баланс нарушиться и дерево необходимо перестраивать.

Дополнительный параметр Balance (показатель баланса), принимающий следующие значения:

1.-1, если левое поддерево на единицу выше правого;

2.0, если высоты обоих поддеревьев одинаковы;

3.1, если правое поддерево на единицу выше левого.

Если в какой-либо вершине баланс высот нарушается, то необходимо так перестроить имеющееся дерево, чтобы восстановить баланс в каждой вершине. Для восстановления баланса будем использовать процедуры поворотов АВЛ-дерева.

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

1.q := p→Left

2.q→Balance := 0

3.p→Balance := 0

4.p→Left := q→Right

5.q→Right := p

6.p := q

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

1.q := p→Left, r := q→Right

2.IF (r→Balance<0) p→Balance := +1

3.ELSE p→Balance := 0 FI

4.IF (r→Balance>0) q→Balance := –1

5.ELSE q→Balance := 0 FI

6.r→Balance := 0

7.p→Left := r→Right, q→Right := r→Left

8.r→Left := q, r→Right := p, p := r

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

1.q := p→Right

2.q→Balance := 0

3.p→Balance := 0

4.p→ Right:= q→ Left

5.q→ Left := p

6.p := q

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

1.q := p→ Right, r := q→ Left

2.IF (r→Balance>0) p→Balance := -1 ELSE p→Balance := 0 FI

3.IF (r→Balance<0) q→Balance := 1 ELSE q→Balance := 0 FI

4.r→Balance := 0

5.p→ Right:= r→ Left, q→ Left:= r→ Right

6.r→ Left := p, r→Right := q, p := r