数据结构习题解析5-18(邓俊辉老师第3版)

template <typename T> template <typename VST> //元素类型、操作器
void BinNode<T>::travLevel(VST& visit) //二叉树层次遍历算法
{ 
	Queue<BinNodePosi(T)> Q; //辅助队列
	Q.enqueue(this); 
	while (!Q.empty()) 
	{ 
		BinNodePosi(T) x = Q.dequeue(); visit(x->data); 
		if (HasLChild(*x)) Q.enqueue(x->lChild); //左孩子入队
		if (HasRChild(*x)) Q.enqueue(x->rChild); //右孩子入队
	}
}

考虑如上对于二叉树的层次遍历方法,设二叉树只有n个顶点,求证:
a)只要辅助队列的Q的容量不低于 ⌈n/2⌉ ,就不至于出现中途溢出问题;
访问一个节点指从队列中取出一个顶点,访问,并将该节点的子节点加入队列中。
容易验证当访问的节点度数为0、1、2时,对队列中节点个数的影响分别是 -1、不变、+1。故在按从上到下、从左到右的顺序依次访问各个节点时,队列中节点的个数会随之波动。
假设n个节点的二叉树最多有m个二度节点,且这m个二度节点连续地处于层次访问顺序的开始,那访问n个节点的二叉树时队列中最多有m+1个节点(初始时队列中只有根节点,随后每访问一个二度节点队列中节点数量加一,直至二度节点访问完毕到达峰值)。
具有n个节点的二叉树中所有节点的度(入度)之和为 n-1,最多具有⌊(n-1)/2⌋个二度节点。完全二叉树就是二度节点最多的情况,且它的二度节点都处于层次访问顺序开始。由上段的分析,访问具有n个节点的二叉树时,队列中最多具有
m+1=⌊(n-1)/2⌋+1=⌈n/2⌉个节点。
得证。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值