IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> бинарные деревья, нужна помощь
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 61
Пол: Мужской
Реальное имя: Alexander

Репутация: -  0  +


Помогите сделать так что бы правое, левое поддерево и корень выводилось по отдельности, а не так как у меня. Комменты я добавил если что не ясно спросите.
 {Разработайте программу работы с бинарным деревом.
Программа должна содержать следующие процедуры,
вызываемые из меню:
- построение пустого дерева;
- вставка поддерева в указанное место;
- удаление указанного элемента;
- просмотр дерева в следующем порядке: правая ветвь, левая ветвь, узел}
program treework;
uses CRT,Graph;

type PTree = ^TTree;
TTree = record
info:byte;
left,right: PTree;
end;

function getint(ident:string):byte;
var s:byte;
begin
write('vvedite ',ident,' : ');
readln(s);
getint:=s;
end;
procedure CreateTree (var root:PTree;info:byte);
var elem:PTree;
begin
if (root<>NIL) then
begin
new(elem);
elem^.left:=NIL;
elem^.right:=NIL;
elem^.info:=info;
end
else
if (info>root^.info) then
CreateTree(root^.left,info);

end;


procedure addelem(var root:PTree;info:byte);
var elem:PTree;
begin
if (root=NIL) then (* если дерево пустое, то *)
begin
new(elem); (* Создать новый лист *)
elem^.left:=NIL;
elem^.right:=NIL;
elem^.info:=info; (* Записать туда значение требуемого элемента *)
root:=elem; (* Присоединить новый лист вместо пустого дерева *)
end
else (* Иначе *)
begin
if (info<root^.info) then (* Если добавляемое значение меньше текущего узла, то *)
addelem(root^.left,info) (* Добавить его в левое поддерево *)
else (* Иначе *)
addelem(root^.right,info); (* Добавить его в правое поддерево *)
end;
end;


procedure printLKP(root:PTree);
begin
if (root<>NIL) then (* Если дерево не пустое *)
begin
printLKP(root^.right); (* Распечать правое поддерево *)
printLKP(root^.left); (* Распечатать левое поддерево *)
write(root^.info,' '); (* Распечатать корень дерева *)

end;
end;

procedure printLKP_wrapper(root:PTree);
begin
clrscr;
if (root=NIL) then (* Если дерево пустое *)
writeln('Derevo pusto!') (* Сообщить об этом *)
else (* Иначе *)
PrintLKP(root); (* Распечатать дерево *)
writeln;
writeln('nagmite lubyu klafshu dly vixoda iz menu');
readkey;
end;


procedure delelem(var root:PTree;info:byte);
var temp:PTree;
begin
if (root<>NIL) then (* Если дерево не пустое, то *)
begin
if (info<root^.info) then (* Если удаляемый элемент меньше тек. узла, то *)
delelem(root^.left,info) (* Удалить его из левого поддерева *)
else (* Иначе *)
if (info>root^.info) then (* Если удаляемый элемент больше тек. узла, то *)
delelem(root^.right,info) (* Удалить его из правого поддерева *)
else (* Иначе тек. узел - удаляемый элемент *)
begin
if (root^.left=NIL) and (root^.right=NIL) then (* Если тек. узел - лист, то *)
begin
dispose(root); (* Удалить его *)
root:=NIL; (* Поставить на его место пустое дерево *)
end
else
if (root^.left=NIL) and (root^.right<>NIL) then (* Если у тек.узла есть только правая ветвь *)
begin
temp:=root; (* Присоединить её вместо тек. узла *)
root:=root^.right;
dispose(temp); (* Удалить тек. узел *)
end
else
if (root^.left<>NIL) and (root^.right=NIL) then (* Если у тек.узла есть только левая ветвь *)
begin
temp:=root; (* Присоединить её вместо тек. узла *)
root:=root^.left;
dispose(temp); (* Удалить тек. узел *)
end


end;
end;
end;

procedure showmenu;
begin
clrscr;
writeln(' Binarnoe derevo');
writeln;
writeln(' 1) Dobavit element');
writeln(' 2) raspechatat derevo right vetv - left vetv - koren - ');
writeln(' 3) Ulalit element');
writeln(' 4) sozdanie dereva');
writeln(' 5) exit');
writeln;
write('vash vibor : ');

end;

Var Tree:PTree;
selection:integer;

begin
Tree:=NIL; (* Создать пустое дерево *)
repeat
showmenu; (* Вывести на экран меню *)
readln(selection); (* Считать с клавиатуры выбор пользователя *)
writeln;
case selection of (* Выполнить действия в соответствии с этим выбором *)
1: addelem(Tree,getint('element dlya dobavleniya'));
2: printLKP_wrapper(Tree);
3: delelem(Tree,getint('element dlya udaleniya'));
4: CreateTree(Tree,getint('derevo sozdano'));
5: clrscr;

end;
until selection=5;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 61
Пол: Мужской
Реальное имя: Alexander

Репутация: -  0  +


Так поможешь? А то я даж незнаю о чем ты говоришь(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 10.09.2025 6:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name