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

Вывести дерево в графическом виде

07.03.2023, 21:19. Показов 249. Ответов 5

Студворк — интернет-сервис помощи студентам
Суть в чем, программа полностью рабочая и все выводит.
Такая просьба, мне нужно переделать вывод, чтобы графические выводило дерево со всеми значениями.
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
181
182
program BinaryTree;
 
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
07.03.2023, 21:19
Ответы с готовыми решениями:

представить Дерево treewidget в графическом виде, как идаграммы
Привет всем, подскажите пожалуйста какой библиотекой воспользоваться чтобы сделать дерево как...

Вывести в графическом виде содержимое file.com
Есть желание для облегчения понимания начинающими программистами {и меня в том числе :)} создать...

Вывести в графическом виде заданную функцию двух переменных
Вывести в графическом виде заданную функцию двух переменных Z. Z=(sinx+siny)*{e}^{-|x/5|}

Как вывести бинарное дерево в виде: (А(B)(D))
Можете поделиться идеями и мыслями? Или кодом, если знаете. Добавлено через 49 минут Все, нашел...

5
5057 / 2631 / 2345
Регистрация: 10.12.2014
Сообщений: 9,993
08.03.2023, 09:23 2
В разных IDE работа с графикой различается.
0
0 / 0 / 0
Регистрация: 02.06.2022
Сообщений: 42
10.03.2023, 08:06  [ТС] 3
JuriiMW, У меня Lazarus
0
Модератор
9593 / 4912 / 3245
Регистрация: 17.08.2012
Сообщений: 15,346
11.03.2023, 04:01 4
raiinc, какое приложение нужно? Консольное или оконное?
0
0 / 0 / 0
Регистрация: 02.06.2022
Сообщений: 42
15.03.2023, 20:09  [ТС] 5
Спасибо вам, но уже работу сдал и проблему решил.
0
Модератор
9593 / 4912 / 3245
Регистрация: 17.08.2012
Сообщений: 15,346
15.03.2023, 23:49 6
raiinc, мы рады за Вас. Поздравляем, и успехов Вам в будущем.

Однако, по правилам форума, которые Вы обещали соблюдать, и ссылка на которые есть на любой странице форума, скрытничать вроде как нехорошо. Пожалуйста, выполняйте Ваше обещание.
4.10. Если вопрос был решен вами самостоятельно, отпишите об этом в своей теме - есть и другие люди, которые столкнутся с той же проблемой, и им поможет ваш ответ.
Можете, конечно, не публиковать Ваше решение, если оно сделано не Вами, чтобы (скорее, гипотетически) не спалиться. В этом случае мы Вас вполне можем понять.

Если Вы, пусть даже и не всё, сделали сами, но можете объяснить каждый символ Вашего (или полученного Вами) решения - не жадничайте, смело публикуйте решение.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2023, 23:49
Помогаю со студенческими работами здесь

как вывести дерево в виде дерева
#include&lt;iostream&gt; #include&lt;Windows.h&gt; #include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;list&gt;...

Бинарные деревья поиска: вывести дерево в следующем виде
Кто знает, подскажите, как вывести дерево на экран в таком виде: 50 / ...

Вывести дерево двоичного поиска в ширину в виде дерева, то есть по уровням
Помогите исправить программу, чтобы при выводе дерева в шируну, выводилось в виде дерева по...

Построить дерево, заданное в виде массива курсоров на родительский элемент, вывести его узлы
Построить дерево, заданное в виде массива курсоров на родительский элемент, вывести...

Перевод простого трансцендентного выражения(представленного в виде формулы в графическом или текстовом виде(текст или псевдографика) в линейную форму,
Вечер добрый, господа программисты, существует задача: Перевод простого трансцендентного...

Дерево в консоли(Нужно вывести данные из массива структуры на экран в виде дерева. Похожего TtreeView в билдере.)
Здравствуйте. Есть структура struct zap { int n; int n_r; AnsiString text; }; где...

Массив строк представить в виде упорядоченного бинарного дерева. Вывести дерево и слои со строками одинаковой длины на экран
В общем, вместо вывода дерева со слоями, строки которого одинаковой длины,просто убирает листья у...


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

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

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