Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЭ_У_Студентам / ГЭ-У2_Распечатки.doc
Скачиваний:
41
Добавлен:
05.06.2015
Размер:
2.59 Mб
Скачать

Бинарные деревья

  • Бинарное (двоичное) дерево

Упорядоченноедерево, которое либо пусто, либо содержит корень и два поддерева.

Рис. 3. Пример двоичного дерева

  • ОПИСАНИЕ УЗЛА ДВОИЧНОГО ДЕРЕВА

    Type

    TREE=^NODE;

    NODE=record

    KEY:char;

    LEFT,RIGHT:tree;

    End;

    Рис. 4. Узел двоичного дерева

  • ПРИМЕРЫ ОПЕРАЦИЙ НАД ДЕРЕВЬЯМИ

  • Обход дерева в соответствии с установленным правилом.

  • Создание дерева с заданными свойствами.

  • Удаление дерева.

  • Включение/исключение узла с заданным значением.

  • Выполнение эквивалентных преобразований дерева.

  • ОБХОД БИНАРНОГО ДЕРЕВА

Цель обхода - "посещение" всех узлов дерева. В зависимости от порядка перечисления узлов дерева (алгоритма обхода) различают следующие основные виды обхода деревьев(Корень - rooT,Левое - Left,Правое - Right):

  1. Сверху вниз(КЛП,TLR,-обход, префиксная запись)

  2. Слева направо(ЛКП,LTR,-обход, инфиксная запись)

  3. Снизу вверх(ЛПК,LRT,-обход, постфиксная запись)

* Левое и правое поддеревья (L, R) – тоже деревья, поэтому их узлы посещаются в соответствии с выбранным обходом (рекурсия).

  • Лучше остановиться на этих трех обходах (см. Н. Вирт, стр.244), попытки добавить 3 оставшихся возможных обхода (КПЛ, ПКЛ, ПЛК) - лишняя трата времени.

Рис. 5. Примеры обхода бинарных деревьев

ДЕРЕВО А:

КЛП: РТСТУКРУА

ЛКП: СТРУКТУРА

ЛПК: СТКУУАРТР

ДЕРЕВО B:

КЛП: 435790

ЛКП: 537490

ЛПК: 573094

  • ПРИМЕР 1. ПРОЦЕДУРЫ ОБХОДА ДЕРЕВЬЕВ

{КЛП}

Procedure preorder(t:tree);

Begin

If t<>nil then

begin

P(t);

Preorder(t^.left);

Preorder(t^.right);

end;

end;

{ЛКП}

Procedure inorder(t:tree);

Begin

if t<>nil then

begin

inorder(t^.left);

P(t);

Inorder(t^.right);

End;

End;

{ЛПК}

Procedure postorder(t:tree);

Begin

if t<>nil then

begin

postorder(t^.left);

postorder(t^.right);

P(t);

End;

end;

P(t)- вывод значения узла t и/или другие операции с текущим узлом дерева.

  • ПРИМЕЧАНИЕ. См. также программу Treeobhod.exe (каталог \Программы\01_Обход) - пример трех обходов создаваемых деревьев.

  • ЗАДАНИЕ 1. Укажите следующие характеристики для дерева на рис. 3:

a) высоту (____________)

b) длину пути (____________)

c) листья (____________)

d) внутренние узлы (____________)

Обойдите это дерево с помощью трех известных алгоритмов

КЛП:__________________________

ЛКП:__________________________

ЛПК:__________________________

  • ПРИМЕР 2. По заданным двум обходам нарисовать диаграмму исходного дерева:КЛП: АПЕЛРЬ ЛКП: АЕЛПРЬ

  • При обходах КЛП и ЛПК однозначно восстановить исходное дерево не получится - ПОЧЕМУ?

  • РЕШЕНИЕ:

КЛП: Ищем корень дерева:АПЕЛРЬ

ЛКП:Ищем ключА, выделяем поддеревья:(-)ЛАК(ЕЛПРЬ)П; левое поддерево пустое.

КЛП: Ищем корень правого поддерева для вершиныА:ПЕЛРЬ

ЛКП:Ищем ключП:(ЕЛ)Л ПК(РЬ)П.

Левое поддерево для П: КЛП-ЕЛ,ЛКП-ЕЛ.

Корень – Е,Л-в правом поддереве.

Правое поддерево для П: КЛП-РЬ,ЛКП-РЬ

Корень – Р,Ь-в правом поддереве.

Результат выполненных действий см. на рис. 8.