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

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)已经不会更新&
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值