0 / 0 / 0
Регистрация: 02.06.2022
Сообщений: 42
1

Бинарное дерево

10.03.2023, 00:29. Показов 234. Ответов 2

Студворк — интернет-сервис помощи студентам
Суть в чем, программа рабочая и я ею доволен, а вот преподу не нравится т.к. у меня не в виде дерева(нарисованного в консоле). Возможно несу чушь, но нужна помощь с этим.
Pascal
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
type
PNode = ^TNode;
TNode = record
Data: integer;
Left: PNode;
Right: PNode;
end;
 
// Создание нового узла
function NewNode(Value: integer): PNode;
var
Node: PNode;
begin
New(Node);
Node^.Data := Value;
Node^.Left := nil;
Node^.Right := nil;
NewNode := Node;
end;
 
// Добавление элемента в дерево
procedure Insert(var Root: PNode; Value: integer);
begin
if Root = nil then
Root := NewNode(Value)
else if Value < Root^.Data then
Insert(Root^.Left, Value)
else
Insert(Root^.Right, Value);
end;
 
// Удаление элемента из дерева
function Delete(var Root: PNode; Value: integer): boolean;
var
Temp: PNode;
begin
if Root = nil then
Delete := false
else if Value < Root^.Data then
Delete := Delete(Root^.Left, Value)
else if Value > Root^.Data then
Delete := Delete(Root^.Right, Value)
else
begin
if (Root^.Left = nil) and (Root^.Right = nil) then
begin
Dispose(Root);
Root := nil;
end
else if Root^.Left = nil then
begin
Temp := Root;
Root := Root^.Right;
Dispose(Temp);
end
else if Root^.Right = nil then
begin
Temp := Root;
Root := Root^.Left;
Dispose(Temp);
end
else
begin
Temp := Root^.Right;
while Temp^.Left <> nil do
Temp := Temp^.Left;
Root^.Data := Temp^.Data;
Delete(Root^.Right, Temp^.Data);
end;
Delete := true;
end;
end;
 
// Обход дерева симметрично позволяет вывести все значения в дереве в порядке возрастания.
procedure InorderTraversal(Root: PNode);
begin
if Root <> nil then
begin
InorderTraversal(Root^.Left);
Write(Root^.Data, ' ');
InorderTraversal(Root^.Right);
end;
end;
 
// Обход дерева прямым способом позволяет вывести значения в дереве в порядке, в котором они были добавлены.
procedure PreorderTraversal(Root: PNode);
begin
if Root <> nil then
begin
Write(Root^.Data, ' ');
PreorderTraversal(Root^.Left);
PreorderTraversal(Root^.Right);
end;
end;
 
// Обход дерева обратным способом позволяет вывести значения в дереве в порядке, обратном порядку, в котором они были добавлены.
procedure PostorderTraversal(Root: PNode);
begin
if Root <> nil then
begin
PostorderTraversal(Root^.Left);
PostorderTraversal(Root^.Right);
Write(Root^.Data, ' ');
end;
end;
 
// Поиск элемента в дереве
function Search(Root: PNode; Value: integer): boolean;
begin
if Root = nil then
Search := false
else if Root^.Data = Value then
Search := true
else if Value < Root^.Data then
Search := Search(Root^.Left, Value)
else
Search := Search(Root^.Right, Value);
end;
 
var
Root: PNode;
Choice, Value: integer;
begin
Root := nil;
repeat
WriteLn('1. Dobavit element');
WriteLn('2. Udalit element');
WriteLn('3. Obhod dereva semetri4no');
WriteLn('4. Obhod dereva pryamim sposobom');
WriteLn('5. Obhod dereva obratnim sposobom');
WriteLn('6. Poisk elementa');
WriteLn('7. Vihod');
Write('Vibirite deystvie: ');
ReadLn(Choice);
case Choice of
1:
begin
Write('Vvedite zna4enie: ');
ReadLn(Value);
Insert(Root, Value);
end;
2:
begin
Write('Vvedite zna4enie: ');
ReadLn(Value);
if Delete(Root, Value) then
WriteLn('Element udalen ')
else
WriteLn('Element ne nayden');
end;
3:
begin
Write('Simmetri4niy obhod: ');
InorderTraversal(Root);
WriteLn;
end;
4:
begin
Write('Pryamoy obhod: ');
PreorderTraversal(Root);
WriteLn;
end;
5:
begin
Write('Obratniy obhod: ');
PostorderTraversal(Root);
WriteLn;
end;
6:
begin
Write('Vvedite zna4enie: ');
ReadLn(Value);
if Search(Root, Value) then
WriteLn('Element nayden')
else
WriteLn('Element ne nayden');
end;
end;
until Choice = 7;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2023, 00:29
Ответы с готовыми решениями:

Бинарное дерево
Привет, соседи! Столкнулся со следующей задачей: Написать программу, которая создает бинарное...

Бинарное дерево
Написал в универе прогу с бинарным деревом, паскаль ругается на какие-то имена из неглобального...

Бинарное дерево
Создать простое бинарное дерево с именем, кто сможет помоч?

Бинарное дерево
Отобразить с помощью бинарного дерева предложение: &quot;Боженко Роксолана изучает программирование&quot;....

2
327 / 218 / 107
Регистрация: 12.02.2019
Сообщений: 984
10.03.2023, 18:45 2
Цитата Сообщение от raiinc Посмотреть сообщение
у меня не в виде дерева
так преподу форма нужна, или "нарисованного в консоле"?
0
Модератор
9608 / 4928 / 3252
Регистрация: 17.08.2012
Сообщений: 15,370
11.03.2023, 04:03 3
raiinc, по аналогичной Вашей теме Вывести дерево в графическом виде я правильно понимаю, что Вам нужно решение в Lazarus? Какое приложение нужно, консольное или оконное?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2023, 04:03
Помогаю со студенческими работами здесь

Бинарное дерево
Задание: сформировать бинарное дерево с ключами: 70, 90, 43, 19, 37, 92, 85, 107. Удалить вершину,...

Бинарное дерево
кто нибудь!!!!!!!!!!! помогите!!!!! мне нужно к зачету сдать задачу, а как с нею бороться не знаю:...

бинарное дерево
как сделать бинарное дерево???

Бинарное дерево на Паскале.
Помогите пожалуйста реализовать дерево ____A __B___C ______D ____E___F __G_H__L_K 1)...

Сохранить бинарное дерево в файл
Подскажите, пожалуйста, как сохранить бинарное дерево в файл? Суть задачи: необходимо создать...

вывести бинарное дерево на экран
у меня задание 1 построить дерево двоичного поиска, вывести его на экран любым способом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru