- •2. Двоичные деревья
- •Inf : Elem;
- •3. Основные операции с двоичными деревьями
- •Inf_s : Tree;
- •Var p:Stack;
- •Var p:Stack;
- •Var start : Stack; flag : boolean;
- •Var I : integer;
- •Var m : integer;
- •Var k : integer;
- •4. Дерево поиска ( сортировки )
- •Inf : integer;
- •Var X : integer; Root : Tree;
- •Var flag : boolean;
- •InTree(Root,X)
- •Var q : Tree;
- •Var q : Tree;
- •Var s: Tree;
- •5. Сбалансированные деревья
- •Var p : Tree;
- •Var I : integer;
Var p : Tree;
nl,nr : integer;
begin
if n=0 then p:=nil
else
begin
new(p);
with p^ do
begin
read(F,inf);
nl:=n div 2; nr:=n-nl-1;
L:=Balance(nl); R:=Balance(nr);
end
end;
Balance:=P
end; { Balance }
Пример 5.2. Построить идеально сбалансированное дерево, изображенное на рисунке 8 а).
Число уровней дерева на рисунке 8 а) – n . Значение k вершины на каждом уровне дерева меняется от 1 до n.
Рекурсивная функция Tree_1n построения дерева T вида 8 а) имеет 3 параметра ( T, n, k ) и может быть описана так :
procedure Tree_1n(var T : Tree; n,k : integer);
Var I : integer;
begin
if k > n then T:=nil
else
begin
new(T); T^.inf:=k;
Tree_1n (T^.L, n, k+1);
Tree_1n (T^.R, n, k+1);
end
end; { Tree_1n }
Обращение к процедуре Tree_1n для построения дерева Root заданным способом будет иметь вид: Tree_1n(Root,n,1);
Процедуры включения и исключения, восстанавливающие идеально сбалансированное дерево, – довольно сложные операции и не всегда оправданы. Менее строгое определение сбалансированного дерева было предложено Г.М. Адельсоном-Вельским и Е.М. Ландисом :
Дерево называется сбалансированным тогда и только тогда, когда высоты двух поддеревьев каждой из его вершин отличаются не более чем на единицу.
Деревья, удовлетворяющие такому условию, называют равновесными [7] или АВЛ – деревьями. Идеально сбалансированные деревья являются частным случаем АВЛ – деревьев.
Процедуры включения и исключения, сохраняющие сбалансированность деревьев, подробно описаны в [ 2, 4 ].
Упражнение 5.1. Описать процедуру построения дерева, изображенного на рисунке 8 а), используя два параметра ( T, n ).
Упражнение 5.2. Описать процедуру построения дерева, изображенного на рисунке 8 б).
ЛИТЕРАТУРА
1 Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык паскаль. – М.: Наука,1988.–320 с.
2 Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989. –360 с.
3 Вьюкова Н.И., Галатенко В.А., Ходулев А.Б. Систематический подход к программированию. - М.: Наука, 1988.– 208 с.
4 Кнут Д. Искусство программирования для ЭВМ. Том 1. Основные алгоритмы. - М.: Мир, 1976. – 736 с.
5 Кнут Д. Искусство программирования для ЭВМ. Том 3. Сортировка и поиск. - М.: Мир, 1978. – 844 с.
6 Мейер Б., Бодуэн К. Методы программирования: В 2-х томах. Т.1. -М.: Мир, 1982. – 356 с.
7 Мейер Б., Бодуэн К. Методы программирования: В 2-х томах. Т.2. -М.: Мир, 1982. – 368 с.
8 Методы программирования. Учебное пособие / Минакова Н.И., Невская Е.С., Угольницкий Г.А., Чекулаева А.А., Чердынцева М.И. – М.: Вузовская книга, 1999. – 280 с.
9 Пильщиков В.Н. Сборник упражнений по языку Паскаль. – М.: Наука, 1989. – 160 с.
10. Амелина Н.И., Русанова Я.М., Пасечный Л.Г. Языки программирования и методы трансляции. Задания по учебной практике. Методические указания для студентов 2 курса вечернего отделения механико-математического факультета. – Ростов-на-Дону, УПЛ РГУ, 2006. – 16 с.