М | Пользуемся тегами klem4 |
условие задачи: Разработать программу, которая определяет, равны ли два бинарных дерева.
Реализована таким образом:
uses Crt;
Type
pptr = ^TTree;
TTree =
Record
info: Char;
llink, rlink: pptr;
End;
Function AddToTree(root: pptr;
nValue: Char): pptr;
Begin
If root = nil Then
Begin
root := New(pptr);
root^.info := nValue;
root^.llink := nil;
root^.rlink := nil;
AddToTree := root;
Exit;
End;
If root^.info < nValue Then
root^.rlink := AddToTree(root^.rlink, nValue)
Else
root^.llink := AddToTree(root^.llink, nValue);
AddToTree := root;
End;
function equal(p1, p2 : pptr) : boolean;
begin
if (p1=nil) and (p2=nil) then equal := true
else if (p1<>nil) and (p2<>nil)
then equal := (p1^.info= p2^.info) and equal(p1^.llink, p2^.llink)
and equal(p1^.rlink, p2^.rlink)
else equal := false;
end;
Var
s, s1: String;
root, root1: pptr;
i: byte;
Begin
ClrScr;
begin
writeln(memavail);
writeln('vvedite simvoly pervogo dereva:');
readln(s);
root := nil;
For i := 1 To Length(s) Do
root := AddToTree(root, s[i]);
end;
begin
writeln('vvedite simvoly vtorogo dereva:');
read(s1);
root1 := nil;
For i := 1 To Length(s1) Do
root1 := AddToTree(root1, s1[i]);
end;
if equal(root, root1)=true then writeln('dwa dereva ravny')
else writeln('dwa dereva ne ravny');
writeln(memavail);
Readkey
End.
Проблема... Как освободить динамическую память?