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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
| uses crt,GraphABC;
const a:array [1..10] of integer = (7, 5, 9, 3, 1, 10, 6, 8, 4, 2);
type
PTree = ^ TTree; //указатель на узел дерева
TTree = record //узел дерева
data: integer; //номер дерева
left, right: pTree; //листья дерева
end;
var pRoot:pTree;
for_menu,x,num:integer;
//======= Процедура вставки нового элемента в дерево
Procedure Add_Tree(data_n:integer;Var pRoot:pTree);
begin
if pRoot=nil then //если пустое дерево, то создаем 1 корень и 2 листа
begin
New(pRoot);
pRoot^.data:=data_n;
pRoot^.left:=nil;
pRoot^.right:=nil;
end
else if data_n < pRoot^.data then //если значение корня больше нового значения
Add_Tree(data_n,pRoot^.left) //то к дереву прикрепляется левый лист
else
Add_Tree(data_n,pRoot^.right); // иначе к дереву прикрепляется правый лист
end;
//================== Процедура печати дерева
Procedure Print_Tree(pRoot:pTree;n:integer);
var i:integer;
begin
if pRoot <> nil then //если дерево не пустое
begin
for i:=1 to n do
write('=');
writeln(pRoot^.data);
Print_Tree(pRoot^.left,n+1);
Print_Tree(pRoot^.right,n+1);
end; end;
//========== Процедура очистки дерева
Procedure Clear_Tree(var pRoot:pTree);
begin
if pRoot <> nil then //если дерево не пустое
begin
Clear_Tree(pRoot^.left); //то удаляется левый лист
Clear_Tree(pRoot^.right); //удаляется правый лист
dispose(pRoot); //удаляется узел или корень
end; end;
//========== Процедура поиска элемента дерева
Procedure Search(data_n:integer;pRoot:pTree);
begin
if pRoot=nil then writeln('Элемент не найден!')
else if pRoot^.data=data_n then writeln('Элемент найден!')
else if data_n < pRoot^.data then
Search(data_n,pRoot^.left)
else
Search(data_n,pRoot^.right); end;
//====== Процедура для меню
Procedure menu(num:integer);
var i:integer;
begin
case num of
0: CloseWindow; // Выход
1: begin // Построение
for i:=1 to 10 do
Add_Tree(a[i],pRoot);
writeln;
writeln('Дерево построено!');
end;
2: begin // Вставка
writeln;
write('Введите число: ');
readln(x);
Add_Tree(x,pRoot);
end;
3: begin //Печать
writeln;
writeln('Дерево имеет вид:');
writeln;
if pRoot<>nil then Print_Tree(pRoot,0)
else writeln('Дерево пустое!');
end;
4: begin // Поиск
writeln;
write('Введите число: ');
readln(x);
Search(x,pRoot);
end;
5: begin // Очистка
Clear_Tree(pRoot);
writeln;
writeln('Дерево очищено!');
end; end; end;
//===== Тело программы
begin
pRoot:=nil;
writeln('Меню программы:');
num:=1;
while num<>5 do
begin
writeln;
Writeln('0 - Выход');
Writeln('1 - Добавить дерево');
Writeln('2 - Вставить');
Writeln('3 - Написать дерево');
Writeln('4 - Поиск');
Writeln('5 - Очистка дерева');
writeln;
Write('Ваш выбор: ');
Readln(for_menu);
menu(for_menu);
end;
end. |