C语言实现的求二叉树的最大宽度(递归与非递归版本)

一、递归

这里说的递归,并非是指整个函数递归,而是说其中一个子函数使用了递归。整个思路可以如下:要求取最大宽度,可以循环求取每一层的宽度,存入一个数组,然后在这个数组里求最大值即可,数组下标即层数(或高度)。对于求某一层的宽度,考虑把它写成一个子函数,参数考虑起始结点以及对应的层数,举例:对于根节点来说,其第三层的宽度,就是其左孩子的第二层的宽度与其右孩子的第二层的宽度之和。

这样,我们可以写出两个函数,我的如下:子函数LevelWidth函数返回特定起点开始的某个层的宽度,采用递归。

int LevelWidth(BT root,int level)//find the width of a level(amounts of nodes in the level).
{
	if(!root)return 0;
	else
	{
		if(level==1)return 1;
		level=LevelWidth(root->lchild,level-1)+LevelWidth(root->rchild,level-1);
	}
	return level;
}

主函数Width返回某起点开始的树的最大宽度,使用循环。

int Width(BT root)//find the maximum width of the btree.
{
	int width,i;
	int w[20];
	for(i=0;i<20;i++)w[i]=0;
	if(!root)width=0;
	else
	{
		for(i=0;i<=
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值