【数据结构】(二叉树)求非空二叉树的宽度 递归&&非递归

求非空二叉树的宽度

方法一递归:

**算法思想:**当我们看图的时候我们可以知道求二叉树的宽度本质就是求其一层有多少个结点 那么如何用递归的方式去计算每一层结点的个数呢?
答案就是:我们只要知道当前结点是那一层就可以利用数组来统计数量了

int Max=0;
int conut_[MaxSize];
void getBiWid(BiTree *T,int k){ //k变量为当前层数 默认从第一层开始
	if(!T)
		return;
	conut_[k]++;
	if(conut_[k]>Max)
		Max=conut_[k];	//Max为数组的最大值
	getBiWid(T->rchild,k+1);
	getBiWid(T->lchild,k+1);
}

非递归求解:

**算法思想:**对于非递归的求法本质就是先序遍历详见计算二叉树的高度递归与非递归 三种方法 C语言这里我使用了两种方案

int getBiWid2(BiTree *t){
	if(!t){
		return 0;
	}
	
	int max=0, front=-1,rear=-1,_count=0,size=0;;
	BiTree *que[MaxSize];
	que[++rear]=t;
	_count++; 
	while(front<rear){
		if(_count>max)
			max=_count;
		size=_count;
		_count=0;
		while(size--){
			t=que[++front];
			if(t->lchild!=NULL){
				que[++rear]=t->lchild;
				_count++;
			}
			if(t->rchild!=NULL){
				que[++rear]=t->rchild;
				_count++;
			}
		}
	
	}
	return max;
}

  • 18
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值