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