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
| type
PTree = ^ TTree; {указатель на узел дерева}
TTree = record {узел дерева}
Data: integer;
Left, Right: PTree;
end;
var Tree: PTree;
procedure writelnD(data:string; num:integer; bool:boolean);//печать с num отступами '-'
begin if bool=true then begin for var i:=1 to num do write('-'); writeln(data); end; end;
//*******************Добавление_Элемента***********************//
procedure Add_Tree(x:integer;var Tree: Ptree);
begin
//прямой порядок обхода
if Tree=nil then begin
New(Tree);
Tree^.Data:=x;
end else if(x<Tree^.Data)then
if(Tree^.Left=nil)then begin
New(Tree^.Left);
Tree^.Left^.Data:=x
end else Add_Tree(x,Tree^.Left)
else if(Tree^.Right=nil)then begin
New(Tree^.Right);
Tree^.Right^.Data:=x
end else Add_Tree(x,Tree^.Right);
end;
//*******************Печать_Левы_Потомков***********************//
function Print_Tree_Dop(Tree: Ptree;i:integer; bool:boolean:=true): boolean;
begin
if Tree=nil then exit;
//прямой порядок обхода
writelnD(IntToStr(Tree^.Data),i, bool);//корень
if (Tree^.Left=nil) and (Tree^.Right<>nil) then else Print_Tree_Dop(Tree^.Left,i+1,true);//левый
Print_Tree_Dop(Tree^.Right,i+1,false);//правый
Print_Tree_Dop:=true;
end;
//*******************Печать_Дерева***********************//
function Print_Tree(Tree: Ptree;i:integer; bool:boolean:=true): boolean;
begin
if Tree=nil then exit;
writelnD(IntToStr(Tree^.Data),i, bool);//корень
if (Tree^.Left=nil) and (Tree^.Right<>nil) then else Print_Tree(Tree^.Left,i+1,true);//левый
Print_Tree(Tree^.Right,i+1,true);//правый
Print_Tree:=true;
end;
//*******************Очиска_Дерева***********************//
function Clear_Tree(var Tree: Ptree): boolean;
begin
if Tree=nil then exit;
//обратный порядок обхода
Clear_Tree(Tree^.Left);//левый
Clear_Tree(Tree^.Right);//правый
dispose(Tree); Tree:=nil;//корень
Clear_Tree:=true;
end;
begin
var kom:integer;
var a: array [1..10] of integer := (7, 5, 9, 3, 1, 10, 6, 8, 4, 2);
for var i:=1 to 10 do Add_Tree(a[i],Tree);
while true do begin
writeln('-----------МЕНЮ-----------');
writeln('1 - построение дерева по умолчанию');
writeln('2 - печать дерева');
writeln('3 - добавление элемента в дерево');
writeln('4 - очистка дерева');
writeln('5 - Печать левых потомков');
writeln('6 - Выход');
write('Команда: ');
readln(kom);
writeln;
case kom of
1: begin Clear_Tree(Tree); for var i:=1 to 10 do Add_Tree(a[i],Tree); writeln('Дерево построено по умолчанию'); end;
2: begin if Print_Tree(Tree,0,true)=false then writeln('Дерево пустое!');end;
3: begin
write('Введите новое число: '); readln(kom);
Add_Tree(kom,Tree);
writeln('Число успешно добавлено.');
end;
4: if Clear_Tree(Tree) then writeln('Дерево успешно очищено.')
else writeln('Дерево пустое!');
5: if Print_Tree_Dop(Tree,0,false)=false then writeln('Дерево пустое!');
7: exit;
else writeln('Ошибка: Неверный номер команды!');
end;
writeln(' ');
end;
end. |