- •1 Рекурсия
- •2 Рекурсия и Итерация
- •3 Линейный поиск
- •4 Поиск делением пополам (двоичный поиск)
- •5 Сортировка
- •6 Сортировка простыми включениями.
- •7 Сортировка бинарными включениями
- •8 Сортировка простым выбором.
- •9 Сортировка простым обменом (метод пузырька)
- •10 Шейкер сортировка.
- •11 Сортировка включениями с убывающими приращениями (сортировка Шелла).
- •12 Сортировка с разделением (быстрая сортировка).
- •13 Ссылочные типы.
- •14 Динамические структуры данных
- •15 Создание и уничтожение динамических переменных
- •16. Связанные списки
- •17. Связанные списки. Создание очередного элемента. Просмотр списка
- •18. Добавление компонент в середину списка
- •19. Исключение компонент из середины списка
- •20. Рекурсивная обработка списка
- •Вопрос 21
- •22 Деревья.
- •23 Двоичные деревья.
- •24 Двоичное дерево поиска.
- •25 Добавление узла к двоичному дереву.
- •26 Поиск в двоичном дереве.
- •28 Удаление из дерева.
- •29 Деревья общего вида.
- •30 Становление ооп
- •Абстрагирование
- •Иерархия
- •31 Основные концепции
- •2 Наследование
- •3 Индивидуальность объекта.(Про это у меня вообще ничего нет)
- •32 Абстрактные типы данных
- •37 Виртуальные методы.
- •38 Позднее связывание.
- •39 Полиморфизм
- •40 Расширенная совместимость типов.
- •42 Динамические объекты
- •45 Необходимость виртуальных методов.
22 Деревья.
Предположим у нас некоторая структура, состоящая из записей связанных между собой системами ссылок. Причем каждая запись может содержать ссылки на несколько других записей. Так представляются направленные графы. Вершинами или узлами графа является записи, ссылки играют роль ребер. Частным случаем графа является дерево, которое имеет следующее св-во:
- подструктура связанных с некоторыми узлами не связаны между собой;
- существует узел наз. корнем, из которого просмотром конечного числа ребер может достичь любого узла дерева.
На рисунке узел А – это корень, узла Г,Д,Е,Ж,И,К,Л – терминал узла или листья.
Дерево является рекурсивной структурой. Рекурсивное определение: дерево либо пуста, либо состоит из узла содержащего ссылки на непересекающиеся деревья.
23 Двоичные деревья.
Каждый узел двоичного дерева имеет не более двух узлов отростков. Эти два отростка наз. левым и правым отросткам. Эти два отростка не являются взаимозаменяемыми.
Для представления двоичного дерева в Паскале удобно пользоваться записями.
type Link=^Node; node=record Data:char; Left,Right:Link; End;
Просмотр двоичного дерева можно производится рекурсивно, для каждого узла нужно выполнить следующие действия:
исследовать узел, т.е. выполнить какие то операции;
просмотреть левое поддерево;
просмотреть правое.
Эти три шага могут выполнять шесть различных последовательности. Благодаря существующим традиционным соглашением о том, что левая поддерево всегда просматривается перед правым кол-во возможных способов снижается до трех. Три оставшихся способа имеют спец. наименования:
прямой просмотр – сначала исследуется узел затем левое и правое поддеревья;
обратный просмотр – исследуется левое поддерево узел правое;
концевой просмотр – узел исследуется после просмотра поддеревьев.
Рекурсивная процедура, выполняющая прямой просмотр дерева:
procedure preorder (tree:Link);
begin if tree<>nil then begin dosomething(tree); {исследуем узел} preorder(tree^.Left); preorder(tree^.Right); end; end;
Другие виды просмотра могут быть получены путем перестановки трех операторов вход. во внутренний составной оператор. При различных порядках просмотра дерево изображенное на рис. а узлы исследуются в следующие последовательности.
След. последовательность: Д,Б,А,Г,В,Е,З,Ж,И
Обратная последовательность: А,Б,В,Г,Д,Е,Ж,З,И
Концевая: А,В,Г,Б,Ж,И,З,Е,Д
Обратная просмотр приводит к возникновению упорядочности узлов по алфавиту.
24 Двоичное дерево поиска.
Дерево изображенное на рис. а является двоичным деревом поиска.
Дерево наз. двоичным деревом поиска, если для каждого узла ti все ключи в левом поддереве меньше ключа ti а ключи в правом поддереве больше ti.
В дереве поиска можно найти место каждого ключа, начиная от корня и переходя на левые и правые поддеревья в зависимости от значения ключа.
25 Добавление узла к двоичному дереву.
procedure insert (var tree:Link; newdata:char);
begin if tree=nil then begin new(tree); with tree^ do begin Left:=nil; Right:=nil; Data:=newdata; end; end; end; with tree^ do
if newdata<data then insert(Left,newdata) else if newdata>data then insert(Right,newdata); else {продублировать информацию если равна} end;
