Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ бинарные деревья

Автор: Renbo 6.05.2007 3:44

Необходимо написать функцию по подсчёту кол-ва узлов в дереве. Я смог сделать процедуру и то, которая выводить значение будет через ещё одну процедуру. Но что-то в итоге не пашет wacko.gif


TYPE
ND=^NODE;
Node=record
INF1:integer;
INF2:string;
LEFT:ND;
RIGHT:ND;
end;

VAR
ROOT,P,Q:ND;


procedure node_count(P:ND; VAR n_count:Integer);
Begin
IF P<>NIL then
begin
IF (P^.LEFT<>NIL) or (P^.RIGHT<>NIL) then
inc(n_count);
node_count(P^.LEFT,n_count);
node_count(P^.RIGHT,n_count);
end;
End;

procedure prt_node_count(n_count);
VAR
n_count:integer;
Begin
n_count:=0;
node_count(ROOT,n_count);
writeln(n_count);
readkey;
End;


Автор: volvo 6.05.2007 4:10

Тут посмотри:
http://forum.pascal.net.ru/index.php?s=&showtopic=5536&view=findpost&p=42746

Автор: Renbo 6.05.2007 5:06

Да, всё, разобрался smile.gif
У меня прям болезнь какая-то, сидишь сначало не видишь своей ошибки, потом решаешься запостить, постишь, а через несколько минут допирает где ошибся ))
Нехватало всего-лишь одного условия, что если эти узлы - листья


procedure node_count(P:ND; VAR n_count:Integer);
Begin
IF P<>NIL then
begin
IF (P^.LEFT<>NIL) or (P^.RIGHT<>NIL) then
inc(n_count);
IF (P^.LEFT=NIL) and (P^.RIGHT=NIL) then
inc(n_count);
node_count(P^.LEFT,n_count);
node_count(P^.RIGHT,n_count);
end;
End;