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

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

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

28. Добавление вершины в АВЛ – дерево.

Добавление новой вершины в АВЛ-дерево происходит следующим образом.

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

Добавление в АВЛ – дерево (D: данные; Var p: pVertex);

1.IF (p = NIL)

2.new(p), p→Data := D, p→Left := NIL, p→Right := NIL

3.p→Balance := 0, Рост := ИСТИНА

4.ELSE

5.IF (p→Data > D)

6.Добавление в АВЛ – дерево (D, p→Left)

7. IF (Рост = ИСТИНА) {выросла левая ветвь}

8.IF (p→Balance > 0) p→Balance := 0, Рост := ЛОЖЬ

9.ELSE IF (p→Balance = 0) p→Balance := -1

10.ELSE

11.IF (p→Left→Balance < 0) <LL – поворот>

12.ELSE <LR – поворот> Рост := ЛОЖЬ

13.FI

14.FI

15.ELSE IF (p→Data < D)

16.<аналогичные действия для правого поддерева

17.ELSE {p→Data = D, такая вершина уже есть}

18.FI

19.FI

20.FI

Построение АВЛ-дерева с вершинами B 9 2 4 1 7 E F A D C 3 5 8 6