数据结构学习——计算二叉树的层数&用同一思路计算每层结点个数

这篇博客介绍了如何利用队列进行二叉树的层次遍历来计算树的层数以及每一层的节点数量。通过跟踪front和last指针,可以在rear遍历完当前层时更新last,并在front等于last时增加层数。同时,通过在节点入队时更新对应层数的节点计数,可以记录每层的节点数。提供的代码以数组形式展示,便于理解。
摘要由CSDN通过智能技术生成

1.计算层数

主体思路是用队列构建层次遍历。

设计一个last用来标记front正在移动的当前层的最后一个结点,level来标记层数(计数器)

因为rear肯定先于front进入下一层进行结点添加,front能够来到这层时,就说明rear早已把这一层结点铺完,现在正在front的下一层,因此找到一个时机在rear铺完该层的最后一个结点时令last=rear,把最后结点标记的这一操作是可行的。

这个时机就是:当front=当前层last(旧的last)时,说明下一层(rear正在铺设的那层)刚好铺完,此时把rear正在它那层的尾结点,于是更新last,令last=rear。只要这个操作从根结点就开始做,就能保证front在每层运行时能知道自己是不是到尾结点了,当front==last时即到达本层尾结点,让level++记录层数。

int Btdepth(BiTree T){
	if(!T)
		return 0;//如果空表,返回0层
	BiTree Q[MaxiSize];//该数组实际上表示队列,注意是BiTree指针型数组,本来就是用来存指针的
	int front=-1,rear=-1;//Q[front]中f值的增减实际上就是指针在队列上的移动
	int last=0,level=0;//last表示每层最后一个结点对应在数组Q中的号,初始为根结点Q[0]。level从0层开始计
	Q[++rear]=T;//根结点入队
	BiTree p;
	while(front<rear){//最后一个节点时rear(或者说last)已经不会更新&
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值