消星星单机版:pascal语言题:树的繁茂度

来源:百度文库 编辑:高考问答 时间:2024/05/05 05:03:22
一棵二叉树的繁茂度定义为各层结点数的最大值与树的高度的乘积,求给定树的繁茂度。

输入:文件第一行为整数n(n<100),代表树中结点个数,第二行为n个数,分别代表各结点的父结点编码,当然根结点的父结点为0。
输出:这棵树的繁茂度。
[例如]输入
4
0 1 2 1
输出
4
(树高为2,第2层结点最多,结点数为2)
请高手们将源程序发上来,并且将算法告诉我~~谢谢啦~

var
f,a,b:array[1..100] of integer
n,i,j,max,height:integer;
begin
read(n);
for i:=1 to 100 do read(f[i]);
for i:=1 to 100 do a[i]:=0;
for i:=1 to 100 do b[i]:=0;
height:=0;
for i:=1 to 100 do begin
for j:=1 to 100 do
if a[i]=0 then begin
if f[i]=0 then begin
a[i]=1;
break;
end;
if a[f[i]]<>0 then begin
a[i]=a[f[i]]+1;
break;
end;
end;
b[a[i]]:=b[a[i]]+1;
if(height<a[i]) height:=a[i];
end;
max:=0;
for i:=1 to height do
if max<b[i] then max:=b[i];
writeln(max*height);
end;

算法很简单,就是每次找一个能够确定它在第几层的结点,标记他的层数(我的程序中用a数组)和统计该层有几个结点(我的程序中用b数组),最后根据a,b统计出height和max,乘起来输出
程序我直接在回答框里敲的,可能有语法错,您将就着看

过程struct_tree(VAR号码:树); VAR

C:字符;

开始

读(F,C);

如果c ='^',然后开始

P-:=零;退出;在这里似乎换下场{退出}

新的(P)P ^键:= C;

struct_tree(P ^左);

struct_tree(P ^右);
年底;

过程struct_tree(VAR号码:树); VAR

C:字符;

开始

读(F,C);

如果c ='^',然后开始

P-:=零;退出;在这里似乎换下场{退出}

新的(P)P ^键:= C;

struct_tree(P ^左);

struct_tree(P ^右);
年底;

过程struct_tree(VAR号码:树); VAR

C:字符;

开始

读(F,C);

如果c ='^',然后开始

P-:=零;退出;在这里似乎换下场{退出}

新的(P)P ^键:= C;

struct_tree(P ^左);

struct_tree(P ^右);
年底;

过程struct_tree(VAR号码:树); VAR

C:字符;

开始

读(F,C);

如果c ='^',然后开始

P-:=零;退出;在这里似乎换下场{退出}

新的(P)P ^键:= C;

struct_tree(P ^左);

struct_tree(P ^右);
年底;

过程struct_tree(VAR号码:树); VAR

C:字符;

开始

读(F,C);

如果c ='^',然后开始

P-:=零;退出;在这里似乎换下场{退出}

新的(P)P ^键:= C;

struct_tree(P ^左);

struct_tree(P ^右);
年底;