Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДЕРЕВЬЯ.doc
Скачиваний:
23
Добавлен:
13.02.2015
Размер:
241.15 Кб
Скачать

Var k : integer;

begin

if T=nil then COUNT:=0

else

begin

if T^.inf = El then k:=1 else k:=0;

COUNT:=k+COUNT(T^.L,El)+COUNT(T^.R,El)

end

end; { COUNT }

function Double(T : Tree) : boolean;

begin

if T=nil then Double:=false

else

begin

if COUNT(T,T^.inf) > 1 then Double:=true

else

Double:= Double(T^.L) or Double(T^.R)

end

end; { Double }

Пример 3.9. Описать функцию Equal проверки на равенство двух двоичных деревьев одинаковой структуры.

function Equal(T1,T2 : Tree ) : boolean;

begin

if T1=T2 then Equal:=true

else

if (T1 <> nil) and (T2 <> nil) then

if T1^.inf = T2^.inf then

Equal:=Equal(T1^.L,T2^.L) and

Equal(T1^.R,T2^.R)

else Equal:=false

else Equal:=false

end; { Equal }

Пример 3.10. Описать процедуру Copy, которая создает копию T2 дерева T1.

procedure Copy(T1 : Tree; var T2 : Tree);

begin

if T1 = nil then T2:=nil

else

begin

new(T2); T2^.inf:=T1^.inf;

Copy(T1^.L,T2^.L);

Copy(T1^.R,T2^.R);

end

end; { Copy }

Упражнение 3.2. Описать нерекурсивную процедуру или функцию, которая возвращает элемент из самого левого (правого) листа непустого дерева.

Упражнение 3.3. Описать нерекурсивную процедуру или функцию, которая

а) определяет количество узлов дерева;

б) вычисляет сумму (произведение, среднее арифметическое ) всех элементов дерева.

в) определяет число вхождений заданного элемента в дерево;

г) выдает элементы из всех листьев дерева.

Упражнение 3.4. Описать рекурсивную процедуру или функцию, которая

а) определяет количество узлов (листьев, внутренних узлов) дерева;

б) вычисляет сумму (произведение, среднее арифметическое) всех элементов дерева.

в) определяет, входит ли заданный элемент в дерево;

г) выдает элементы из всех листьев (внутренних узлов) дерева;

д) определяет глубину непустого дерева;

е) определяет количество узлов на заданном уровне;

ж) удаляет листья дерева со значениями, равными заданному.

4. Дерево поиска ( сортировки )

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

4.1 Построение дерева поиска

Алгоритм создания дерева поиска основан на следующих правилах :

Если новый элемент меньше, чем значение в узле, то он должен добавляться в левое поддерево, если больше, то в правое.

Если в дереве есть узел с таким значением, то возможны варианты :

а) новый узел добавляется в правое поддерево,

б) новый узел добавляется в левое поддерево,

в) добавление не происходит.

Инфиксный обход такого дерева дает упорядоченную по возрастанию (неубыванию в случае добавления одинаковых элементов ) последовательность.

Пример 4.1. Упорядочить по неубыванию последовательность целых чисел, которая вводится из текстового файла.

program UP;

type Tree = ^Node;

Node = record