您的位置:首页 > 其它

wikioi p1501 二叉树最大宽度和高度

2013-08-24 12:10 393 查看
       这道题目的叙述有一点不清楚,这里的宽度指的是最大的单层结点个数。

       下面是c代码

#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;
const int MAX_N = 21;
int N;
int l[MAX_N];
int r[MAX_N];
int wide[MAX_N];
int answide;
int ansheight;
int init()
{
scanf("%d",&N);
int i;
for (i=1;i<=N;i++)
scanf("%d %d",&l[i],&r[i]);
}
int work(int t,int deep)
{
if (l[t]>0)
{
work(l[t],deep+1);
wide[deep]++;
}
if (r[t]>0)
{
work(r[t],deep+1);
wide[deep]++;
}
if (deep>ansheight) ansheight=deep;
if (wide[deep]>answide) answide=wide[deep];
}
int put()
{
if (N==1) answide=ansheight=1;
printf("%d %d",answide,ansheight);
}
int main()
{
init();
work(1,1);
put();
return 0;
}


 

       下面是Pascal代码:

program eee;
var n,i,maxw,maxd:longint;
lc,rc:array[1..10000]of longint;
wid:array[1..10000]of longint;
procedure go(dep,i:integer);
begin
if lc[i]>0 then
begin
inc(wid[dep]);
go(dep+1,lc[i]);
end;
if rc[i]>0 then
begin
inc(wid[dep]);
go(dep+1,rc[i]);
end;
if dep>maxd then maxd:=dep;
end;

begin
readln(n);if n=1 then  begin writeln(1,' ',1);exit;end;
for i:=1to n do readln(lc[i],rc[i]);
go(1,1);
maxw:=wid[1];
wid[1]:=1;
for i:=2to n do if wid[i]>maxw then maxw:=wid[i];
writeln(maxw,' ',maxd);
end.


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: