Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2010, 23:24   #1
CFYZ-07
Новичок
Джуниор
 
Регистрация: 16.03.2010
Сообщений: 1
По умолчанию Бинарное дерево

"Написать функцию/процедуру которая подсчитывает количество листьев в бинарном дереве и выводит результат на экран"

Вот у меня родилась такая функция

function kolleaf(top:treeptr):integer;
var l:integer;
begin
if top=nil then l:=0
else
if (top^.left=nil) and (top^.right=nil) then
l:=1
else
l:=l(top^.left)+l(top^.right);
kolleaf:=l;
end;

и вот такая процедура но они не работают может кто подскажет что делать?

procedure vyv;
begin
writeln('Kolishestvo listev ',kolleaf(top,l));
end;

за основу брал эту функцию

function KolList(Der: Node): integer;
{рекурсивная функция подсчета количества листьев бинарного дерева}
begin
if Der = NIL then KolList := 0
else
if (Der^.Left = NIL) and ( Der^.Right = NIL) then
{дерево состоит из одного узла, который является листом}
KolList := 1
else
KolList := KolList(Der^.Left) + KolList(Der^.Right);
end;

Вот весь текст программы

program laba;
uses crt;
type
zap=record
fm:string[15]; {фамилия студента}
nm:string[10]; {имя студента}
ot:string[15]; {отчество студента}
mt:integer; {оценка по математике}
hs:integer; {оценка по истории}
ph:integer; {оценкапо физике}
end;

treeptr=^tree;
tree=record
data:zap;
left,right:treeptr;
end;

var top:treeptr;
z:zap;
level,n,i:integer;
number:integer;

function addtree (top:treeptr;newnode:zap):treeptr;
begin
if top=nil then
begin
new(top);
top^.data:=newnode;
top^.left:=nil;
top^.right:=nil;
end
else
if top^.data.fm>newnode.fm then
top^.left:=addtree(top^.left,Newnod e)
else
top^.right:=addtree(top^.right,Newn ode);
addtree:=top
end;

procedure orgtree;
begin
writeln('Dlya vihoda napechataite *');
top:=nil;
while true do
begin
writeln('VVedite familiyu studenta');readln(z.fm);
if z.fm='*' then exit; {выход, если введён символ ’*’ }
writeln('Vvedite imya studenta'); readln(z.nm);
writeln('VVedite otchestvo studenta'); readln(z.ot);
writeln('VVedite otsenku po matematike'); readln(z.mt);
writeln('Vvedite otsenku po istorii'); readln(z.hs);
writeln('Vvedite otsenku po fisike'); readln(z.ph);
top:=addtree(top,z);
end;
end;

procedure dobl;
begin
writeln('Dlya vihoda napechataite *');
writeln('Vvedite imya studenta'); readln(z.nm);
writeln('VVedite otchestvo studenta'); readln(z.ot);
writeln('VVedite otsenku po matematike'); readln(z.mt);
writeln('Vvedite otsenku po istorii'); readln(z.hs);
writeln('Vvedite otsenku po fisike'); readln(z.ph);
top:=addtree(top,z);
end;

procedure prosmotr(top:treeptr);
begin
if top<>nil then
begin
prosmotr(top^.left);
writeln(i,' ',top^.data.fm,' ',top^.data.nm,' ',top^.data.ot,' ',top^.data.mt,' ',top^.data.hs,' ',top^.data.ph);
i:=i+1;
prosmotr(top^.right);
end;
end;

Procedure otobr(top:treeptr;otstup:integer);
begin
if top<>nil then
begin
otstup:=otstup+3;
otobr(top^.right,otstup);
writeln(' 'tstup,top^.data.fm);
otobr(top^.left,Otstup);
end;
end;

Procedure nodecount(top:treeptr;level:integer ;var n:integer);
begin
if (level>=1) and (top<>nil) then
begin
if level=1 then n:=n+1;
nodecount(top^.left,level-1,n);
nodecount(top^.right,level-1,n);
end;
end;

begin
repeat
clrscr;
writeln('1 - Organizacia dvoichnogo dereva');
writeln('2 - Dobavlenie lista k derevu');
writeln('3 - Prosmotr dereva');
writeln('4 - Podschet kolichestva vershin na n-om urovne');
writeln('5 - Vuhod');
writeln('__________________________ ___________________________________ __________');
writeln(' Vvedite nomer punkta menu');
readln(number);
case number of
1rgtree;
2obl;
3:begin
writeln('Vipolnyaetsya procedura prosmotra dereva');
writeln('__________________________ ___________________________________ ___________');
i:=0;
prosmotr(top);
otobr(top,1);
writeln('Press ENTER');
readln;
end;
4:begin
writeln('Vipolnyaetsya procedura podscheta kol-va');
writeln('vershin na n-om urovne');
writeln('__________________________ ___________________________________ ___________');
write('Vvedite znachenie urovnya-->');
read(level);
n:=0;
nodecount(top,level,n);
writeln;
writeln('Na urovne ',level,' nahoditsya ',n,' vershin');
writeln('Press ENTER');
readkey
end;
end;
until number=5;
end.
CFYZ-07 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бинарное дерево СИ Anastasia.K Помощь студентам 0 31.10.2009 18:16
Бинарное дерево С++ Olya90 Помощь студентам 1 20.10.2009 21:45
Бинарное дерево Lazio Общие вопросы C/C++ 2 10.09.2009 20:31