
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Строковый тип данных
- •Описание констант
- •Операция присваивания
- •Приоритет операций
- •Оператор присваивания
- •Совместимость и преобразование типов
- •Элементарный ввод-вывод
- •Лекция 5 Выражения
- •Математические операции
- •Логические операции
- •Операции отношения
- •Приоритет операций
- •Основные математические функции
- •Уменьшает значение числа X на y. Если число y не указано, то уменьшение происходит на 1. Циклы
- •Арифметические циклы
- •Итерационные циклы с предусловием
- •Итерационные циклы с постусловием
- •Операторы завершения цикла
- •Операторы ветвления и цикла Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Операторы ветвления и цикла
- •Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Лекция 7. Подпрограммы: процедуры и функции
- •Пример 27
- •Обмен данными
- •4.2. Множества
- •4.2.1. Объявление типа множества
- •4.2.2. Операции над множествами
- •4.2.3. Пример использования множества
- •Пример 33
- •4.3. Строки
- •4.3.1. Объявление типа String
- •4.3.2. Операции над строковыми переменными
- •4.3.3. Встроенные процедуры и функции обработки строк
- •Пример 34
- •4.1. Матрица
- •4.1.1. Ввод-вывод элементов матрицы
- •4.1.2. Определение индексов элементов матрицы
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Определение и особенности файлов
- •Доступ к компонентам файла
- •Текстовый файл
- •Чтение из текстового файла
- •Запись в текстовый файл
- •Файлы в Тубо Паскаль
- •Файловые процедуры и функции
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Графика Турбо Паскаля
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Статические и динамические памяти переменные
- •Объявление указателей
- •Выделение и освобождение динамической памяти
- •Операции с указателем
- •Пример 41
- •Связанные списки
- •Понятие бинарные деревья. Операции над бинарными деревьями
- •Применение бинарных деревьев
- •Сравнение рекурсии и итерации
- •Пример 51
- •Реализация объектно-ориентированного подхода в турбо-паскале
- •Алгоритмическая и объектная декомпозиция
- •Объектный тип в Турбо-Паскале
- •Способы наследования и переопределения
- •Виртуальные методы
- •Модуль c r t
- •Модуль g r a p h
Понятие бинарные деревья. Операции над бинарными деревьями
Бинарное дерево - это конечное множество элементов, которое либо пусто, либо содержит один элемент, называемый- корнем дерева, и , возможно , другие элементы. Эти элементы делятся на два непересекающихся подмножества, каждое из которых само является бинарным деревом. Такие подмножества называются левым и правым поддеревьями исходного дерева. Каждый элемент бинарного дерева называется узлом. Будем предполагать, что каждый узел двоичного дерева имеет идентифицирующий его ключ. На рис.7 приведен пример бинарного дерева, у которого 9 узлов, A - корень дерева, B - корень левого поддерева, C - корень правого поддерева. Каждый узел двоичного дерева может иметь 0, 1 или 2 поддерева. Так на Рис.6 левое поддерево с корнем C исходного бинарного дерева пусто.
Рис.6. Бинарное дерево
Если X - корень бинарного дерева и Y - корень его левого или правого поддерева, то говорят, что X - отец Y, а Y - левый или правый сын X. В примере на рис.6 A - отец для B и C, B - левый сын A, E - отец G, G - его левый сын. Узел, не имеющий сыновей, называется листом. В нашем примере листья: D, G, H, I. Два узла являются братьями, если они сыновья одного отца (B,C - братья). Глубина бинарного дерева определяется длиной самого длинного пути от корня к листу дерева (на рис.6 глубина дерева равна 3). Каждый узел бинарного дерева содержит информационное поле, а также два указателя (на левое и правое поддерево). Очевидно, что для доступа к узлам бинарного дерева необходимо задать указатель на его корень. Рассмотрим некоторые операции, которые могут быть полезны при использовании бинарного дерева. Пусть P - указатель на узел бинарного дерева Nd. Введем следующие обозначения:
Info (P) - содержимое узла Nd; Left (P) - указатель на левого сына Nd; Right(P) - указатель на правого сына Nd. P = NewD (X) - создание нового бинарного дерева, состоящего из одного узла с информационным полем X; P - указатель на этот узел; SetLeft (P,X) - создание нового левого сына для узла с указателем P; SetRight(P,X) - создание нового правого сына для узла с указателем P.
Узел бинарного дерева представляется в программе в виде записи с соответствующими полями, например:
type Node = ^BDer; BDer = record Info : integer; {информационное поле} Left, Right: Node; {указатели на левое и правое поддеревья} end;
Пример содержит тексты функции, реализующей операцию NewD(X), и процедур, определяющих операции SetLeft(P,X) и SetRight(P,X).
Пример
function NewD(X: integer): Node; {создание нового узла со значением X; функция возвращает указатель на новый узел X} var P: Node; begin New(P); P^.Info := X; P^.Left := NIL; P^.Right := NIL; NewD := P; end; procedure SetLeft (P: Node; X: integer); {создание левого сына для узла с указателем P} begin P^.Left := NewD(X); end; procedure SetRight(P: Node;X: integer); {создание правого сына для узла с указателем P} begin P^.Right := NewD(X); end; |