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

本文提供了一种计算二叉树最大宽度(即单层最大节点数)和高度的方法,通过递归遍历二叉树,并记录每层的节点数量来实现。包括C和Pascal两种语言的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       这道题目的叙述有一点不清楚,这里的宽度指的是最大的单层结点个数。

       下面是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.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值