M
Maxxy
В общем у меня такая задача:
{Сформировать дерево Т и используя рекурсивную подпрограмму,определить число вхождений элемента Е в дерево Т}
А у меня выходит программа, которая определяет, входит ли элемент Е в дерево Т.
Помогите PLEASE переделать правильно задачу
Uses CRT;
Type inform = word;
ss = ^zveno;
zveno = record
inf : inform;
key : integer;
left, right: ss;
end;
Var E,N,I,Rn : Integer;
tr : ss;
Procedure vstavka(var p: ss; k: integer);
Begin
If p = nil then Begin
New(p);
p^.key:=k;
p^.left:=nil;
p^.right:=nil;
End Else Begin
If k < p^.key then vstavka(p^.left, k);
If k > p^.key then vstavka(p^.right, k);
End;
End;
Procedure print(var p: ss; h: integer);
Var i: integer;
Begin
If p <> nil then Begin
Print(p^.right, h + 1);
For i:=1 to h do write(' ');
Writeln(p^.key);
Print(p^.left, h + 1);
End
End;
Function poisk(p: ss; x: integer): boolean;
var b: boolean;
begin
b:=false;
while (p <> nil) and (b = false) do begin
if p^.key = x
then b:=true
else if p^.key < x
then p:=p^.right
else p:=p^.left;
end;
poisk:=b;
end;
Begin
Randomize;
ClrScr;
Write('Введите число потомков N: ');
ReadLn(N);
New(tr);
tr^.key:=Random(100);
tr^.left:=nil;
tr^.right:=nil;
I := 1;
While I <= N Do Begin
Rn := Random(100);
If Not(poisk (tr, Rn)) then Begin
vstavka(tr, Rn);
Inc(I);
End;
End;
print(tr,3);
Write('Введите искомое число E: ');
ReadLn(E);
If poisk (tr, E) Then WriteLn('Такой элемент есть')
Else WriteLn('Такого элемента нет');
ReadLn;
End.
{Сформировать дерево Т и используя рекурсивную подпрограмму,определить число вхождений элемента Е в дерево Т}
А у меня выходит программа, которая определяет, входит ли элемент Е в дерево Т.
Помогите PLEASE переделать правильно задачу
Uses CRT;
Type inform = word;
ss = ^zveno;
zveno = record
inf : inform;
key : integer;
left, right: ss;
end;
Var E,N,I,Rn : Integer;
tr : ss;
Procedure vstavka(var p: ss; k: integer);
Begin
If p = nil then Begin
New(p);
p^.key:=k;
p^.left:=nil;
p^.right:=nil;
End Else Begin
If k < p^.key then vstavka(p^.left, k);
If k > p^.key then vstavka(p^.right, k);
End;
End;
Procedure print(var p: ss; h: integer);
Var i: integer;
Begin
If p <> nil then Begin
Print(p^.right, h + 1);
For i:=1 to h do write(' ');
Writeln(p^.key);
Print(p^.left, h + 1);
End
End;
Function poisk(p: ss; x: integer): boolean;
var b: boolean;
begin
b:=false;
while (p <> nil) and (b = false) do begin
if p^.key = x
then b:=true
else if p^.key < x
then p:=p^.right
else p:=p^.left;
end;
poisk:=b;
end;
Begin
Randomize;
ClrScr;
Write('Введите число потомков N: ');
ReadLn(N);
New(tr);
tr^.key:=Random(100);
tr^.left:=nil;
tr^.right:=nil;
I := 1;
While I <= N Do Begin
Rn := Random(100);
If Not(poisk (tr, Rn)) then Begin
vstavka(tr, Rn);
Inc(I);
End;
End;
print(tr,3);
Write('Введите искомое число E: ');
ReadLn(E);
If poisk (tr, E) Then WriteLn('Такой элемент есть')
Else WriteLn('Такого элемента нет');
ReadLn;
End.