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

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

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

> Структуры, построение дерева из однонаправленного списка
Тёмный Эльф
сообщение 17.01.2007 3:38
Сообщение #1


Влюблённый псих
***

Группа: Пользователи
Сообщений: 185
Пол: Женский
Реальное имя: Лейла

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


Всем доброй ночи.
Помогите пожалуйста разобраться. Я решил написать программу, которая создает однонаправленный список по данным входного файла, затем строит дерево из этого списка и выводит это дерево по правилу левое-корень-правое в выходной файл.
Текст программы ниже. Вроде бы процедуры создания списка и вывода дерева рабочие. Но программа выводит совсем не то. Может быть, само формирование дерева из списка неверно? Или я неправильно обратился к процедуре при вызове из головной программы InsTree(p^.el,kd); ?


program der;
Type
TreeLink=^Tree;
Tree=Record
Data:integer;
Left,Right:TreeLink;
End;

next=^elem;
Elem=RECORD
EL:integer;
Sled: next;
END;
VAR
Uk1,p:next; kd: TreeLink;
variant_obhoda:Integer;

Procedure VVOD(var p:next);
var
m:next;
F1:text;
BEGIN
Assign(F1,'dan.inp');
Reset(f1);
Assign(output,'res.out');
rewrite(output);
New(m);
p:=m;
Readln(f1,m^.el);
m^.sled:=nil;
while not EOF(f1) do
begin
New(m^.sled);
m:=m^.sled;
Readln(f1,m^.el);
m^.sled:=NIL;
End;
Close(f1);
m:=p;
While m<>NIL do
Begin
Writeln(m^.el);
m:=m^.sled;
End;
end; {формирование и вывод линейного списка}

Procedure InsTree(znak:integer; var t:treeLink);
var n:treeLink; p:next;
Begin
if t=nil then
begin
new(t);
with t^ do
begin
Left:=nil;
Right:=nil;
Data:=p^.el;
end;
end
else
if p^.el<=t^.data
then
InsTree(p^.el,t^.left)
else
InsTree(p^.el,t^.right);
end; {создание дерева по данным линейного списка}

Procedure PrintTree(t: TreeLink);
Begin
if t<>Nil
then
begin
PrintTree(t^.Left);
Writeln(t^.Data);
PrintTree(t^.Right);
end;
End; {левое-корень-правое}

BEGIN
VVOD(Uk1);
kd:=nil;
p:=uk1;
While p<>nil do
begin
InsTree(p^.el,kd);
p:=p^.sled;
end;
writeln('.....Получившиеся дерево........');
PrintTree(kd);
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 19.07.2025 13:43
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"