Помощь - Поиск - Пользователи - Календарь
Полная версия: Ввод/вывод дерева
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
DOG-Paul
Вообещм есть процедура ввода дерева.
Нужно организовать его вывод по типу: A B . . C . .
Помогите кто может! smile.gif

 
Program derevo;
uses crt;
type plist=^tlist;
tlist= record
llink,rlink:plist;
info:char;
end;
var a, first:plist;
Procedure vvod (var first:plist);
var s:char;
Begin
readln(s);
If s<>'.'
then
begin
new(a);
first:=a;
a^.info:=s;
vvod(a^.llink);
vvod(a^.rlink);
end
else
first:=nil;
end;
Begin
clrscr;
first:=nil;
vvod (first);
readkey;
End.

DOG-Paul
АУ! sad.gif

Да что такое?
Никто не поможет чтоли? sad.gif
klem4
Не надо спам разводить, сообщения объеденил, подожди, просто твое время еще не пришло ;)) загляни пока сюда : FAQ : Деревья
Гость
Люди! sad.gif
Очень срочно надо.... sad.gif Ну помогите плиз... sad.gif sad.gif
Гость
Люди! Я горю! Помогите иначе мне хана!
Вот что я сделал,но работает не првильно! volvo помоги ради бога! sad.gif

Program derevo;
uses crt;
type plist=^tlist;
tlist= record
llink,rlink:plist;
info:char;
end;
var a, first: plist;
Procedure vvod (var last:plist);
var s:char;
Begin
readln(s);
If s<>'.'
then
begin
new(a);
last:=a;
a^.info:=s;
vvod(a^.llink);
vvod(a^.rlink);
end
else
last:=nil;
end;
procedure print (var last:plist);
Begin
if last<>nil
then
begin
write (last^.info, ' ');
print (last^.llink);
print (last^.rlink);
end
else
begin
write ('. ');
last:=nil;
end;
end;
Begin
clrscr;
first:=nil;
vvod (first);
print (first);
readkey;
End.

.
klem4
Вот изменил чуть-чуть программу из FAQ, мог бы и сам сделать :

uses crt;

Type
TType = char;

TTree = ^TNode;
TNode =
Record
Data: TType;
Left, Right: TTree;
End;
Procedure Add(Var T: TTree; i: TType);

Procedure CreateNode(Var p: TTree; n: TType);
Begin
New(p);
p^.Data := n;
p^.Left := nil;
p^.Right := nil
End;

Begin
If T <> nil Then
With T^ Do Begin

If Data < i Then Add(Right, i)
Else
If Data > i Then Add(Left, i)

End
Else
CreateNode(T, i)
End;

Procedure PrintDown(T: TTree);
Begin
If T = nil Then Exit;
With T^ Do Begin

Write(Data, ' ');
PrintDown(Left); PrintDown(Right)

End
end;

const
s : array[1..10] of char = ('a','b','c','d','e','f','g','k','l','.');
Var
ch: char;
myTree : TTree;
i : byte;


Begin

clrscr;

myTree := nil;

for i := 1 to 10 do
if s[i] <> '.' then begin

Add(myTree, s[i]);
PrintDown(myTree);
WriteLn;
end;
End.

volvo
Гость, все прекрасно и удивительно ... Только вот переменная A описана не там, где нужно... Она должна быть локальной в процедуре Vvod:
var first: plist;
Procedure vvod (var last:plist);
var
s:char;
a: plist;
Begin
readln(s);
If s<>'.' then begin
new(a);
last:=a;
a^.info:=s;
vvod(a^.llink);
vvod(a^.rlink);
end
else last:=nil;
end;
Гость
Спасибо огромное! smile.gif
А почему так было-то? smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.