- •Вопрос 1.
- •Вопрос 2.
- •Вопрос 3.
- •Вопрос 4.
- •Вопрос 5.
- •Вопрос 6.
- •Вопрос 7.
- •Вопрос 8.
- •Вопрос 9.
- •Вопрос 10.
- •Вопрос 11.Рекурсия: понятие, пример использования.
- •Вопрос 12. Строки в Delphi. Способы реализации строк. Основные процедуры и функции.
- •Вопрос 13.
- •Вопрос 14.
- •Вопрос 15.
- •Вопрос 16. Программирование с использованием динамической памяти. Структура оперативной памяти. Понятие указателя.
- •Вопрос 17. Указатели. Описание, допустимые операции
- •Вопрос 18. Статические и динамические переменные. Динамические структуры данных
- •19. Линейные списки. Основные операции над линейными списками.
- •21. Стек: понятие, описание в программе, основные операции
- •22. Очередь: понятие, описание в программе, основные операции
- •23. Списки: понятие, описание в программе, основные операции
- •24. Применение динамических структур данных. Проверка математического выражения на правильность расстановки скобок.
- •Вопрос 25.
- •Вопрос 26.
- •Вопрос 27.
- •Вопрос 28.
- •Вопрос 29.
- •Вопрос 30.
- •Вопрос 33.
- •Вопрос 35.
- •Вопрос 36. Операторы инкремента и декремента. Операторы присваивания
- •Вопрос 37. Функции scanf, printf
- •Вопрос 38. Способы задания разветвляющегося алгоритма в с
- •Вопрос 39. Циклические алгоритмы. Виды циклов в с
- •Вопрос 40. Табулирование функции
- •41. Алгоритм вывода всех простых чисел меньших 100 в с.
- •42. Алгоритм разложения числа на простые множители в с
Вопрос 26.
Деревья, основные определения. Понятие бинарного дерева. Способы представления деревьев.
Дерево - граф без цикла
- динамическая структура
Дерево состоит из вершины и одного или нескольких поддеревьев, каждое поддерево в свою очередь является деревом.
Узел дерева – элемент, который имеет выше или ниже стоящие элементы.
Лист дерева – элемент, который не имеет поддеревьев.
Корень дерева – самый верхний элемент
Самые простые из деревьев считаются бинарные деревья.
Бинарное (двоичное) дерево - это упорядоченное дерево, каждая вершина которого имеет не более двух поддеревьев, причем для каждого узла выполняется правило: в левом поддереве содержатся только ключи, имеющие значения, меньшие, чем значение данного узла, а в правом поддереве содержатся только ключи, имеющие значения, большие, чем значение данного узла. Бинарное дерево является рекурсивной структурой, поскольку каждое его поддерево само является бинарным деревом и, следовательно, каждый его узел в свою очередь является корнем дерева. Узел дерева, не имеющий потомков, называется листом. Схематичное изображение бинарного дерева:
Бинарные деревья достаточно просто могут быть представлены в виде списков или массивов. Списочное представление бинарных деревьев основано на элементах, соответствующих узлам дерева. Каждый элемент имеет поле данных и два поля указателей. Один указатель используется для связывания элемента с правым потомком, а другой √ с левым. Листья имеют пустые указатели потомков. При таком способе представления дерева обязательно следует сохранять указатель на узел, являющийся корнем дерева.
Структура данных для дерева:
type
pEl=^El;
El=record
d:integer;
left, right:pEl;
end;
var
pTop :pEl;
procedure CreateTree;
begin
pTop:=nil;
end;
procedure Add(var a:pEl; x:integer);
begin
If a<>nil then
begin
If a.d>=x then
begin
If a.left=nil then
begin
New(a.left);
a.left.left:=nil;
a.left.right:=nil;
a.left.d:=x;
end
else
Add(a.left,x);
end
else
begin
If a.right=nil then
begin
New(a.right);
a.right.left:=nil;
a.right.right:=nil;
a.right.d:=x;
end
else
Add(a.right,x);
end
end
else
begin
New(a);
a.left:=nil;
a.right:=nil;
a.d:=x;
end;
end;
procedure ShowTree(a:pEl;k:integer);
var S:String;
i:integer;
begin
k:=k+7;
If a.right<>nil then ShowTree(a.right,k);
S:='';
for i:=1 to k-7 do S:=S+' ';
S:=S+IntToStr(a.d);
Form1.Memo1.Lines.Add(S);
If a.left<>nil then ShowTree(a.left,k);
k:=k-7;
end;
Вопрос 27.
Бинарное дерево. Способы прохождения дерева.
Бинарное дерево-это конечное множество элементов, которое либо пусто, либо содержит один элемент, называемый корнем дерева, а остальные элементы множества делятся на два непересекающихся подмножества, каждое из которых само является бинарным деревом.
Эти подмножества называются левым и правым поддеревьями исходного дерева.
Каждый элемент бинарного дерева называется узлом дерева.
Обход бинарного дерева означает систематическое перечисление всех узлов для выполнения необходимой функциональной обработки. Наиболее известны и практически важны 3 способа прохождения, которые отличаются порядком и направлением обхода бинарного дерева. Можно проходить узлы в прямом порядке (сверху-вниз), в симметричном порядке (слева-направо) и, наконец, в концевом порядке (снизу-вверх). Рекурсивные алгоритмы прохождения каждого дерева по каждому из способов включают 3 одинаковых процедуры, где нужно найти корень поддерева, левое поддерево текущего корня и правое поддерево текущего корня. Направление обхода однозначно определяет последовательность выполнения указанных процедур. Последовательность их рекурсивного вызова для каждого способа прохождения перечислена в следующей таблице.
Порядок прохождения |
||
Прямой (префиксный) |
Симметричный (инфиксный) |
Концевой (постфиксный) |
|
|
|
procedure ShowTree(a:pEl);
begin
If a.left<>nil then ShowTree(a.left);
Form1.Memo1.Lines.Add(a.d);
If a.right<>nil then ShowTree(a.right);
end;