|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.03.2010, 23:24 | #1 |
Новичок
Джуниор
Регистрация: 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. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
бинарное дерево СИ | Anastasia.K | Помощь студентам | 0 | 31.10.2009 18:16 |
Бинарное дерево С++ | Olya90 | Помощь студентам | 1 | 20.10.2009 21:45 |
Бинарное дерево | Lazio | Общие вопросы C/C++ | 2 | 10.09.2009 20:31 |