ZBLOG

template int BinaryTree::maxWidth(BTNode* node) { if (node == nullptr) { return 0; } int maxWidth = 0; LinkQueue q ; q.EnQueue(node); while (!q.IsEmpty()) { int levelSize = q.GetL...

template <class DataType>
int BinaryTree<DataType>::maxWidth(BTNode<DataType>* node) {
	if (node == nullptr) {
		return 0;
	}

	int maxWidth = 0;
	LinkQueue<BTNode<DataType>*> q ; // 创建一个队列用于层序遍历
	q.EnQueue(node); // 将根节点入队

	while (!q.IsEmpty()) {
		int levelSize = q.GetLength(); // 当前层的节点个数

		maxWidth = max(maxWidth, levelSize); // 更新最大宽度

		for (int i = 0; i < levelSize; i++) {
			BTNode<DataType>* currNode;  
			q.DelQueue(currNode); // 出队当前节点

			if (currNode->lChild != nullptr) { // 如果当前节点有左孩子,则将其入队
				q.EnQueue(currNode->lChild);
			}

			if (currNode->rChild != nullptr) { // 如果当前节点有右孩子,则将其入队
				q.EnQueue(currNode->rChild);
			}
		}
	}

	return maxWidth;
}
 
template <class DataType> 
int BinaryTree<DataType>::Width()
{
	int width = maxWidth(root); // 调用maxWidth函数获取二叉树的最大宽度
	return width;
}

上述代码实现了求二叉树的最大宽度(即二叉树中某一层的节点数量的最大值)。主要步骤如下:

  1. 首先判断给定的二叉树是否为空,若为空则直接返回0。
  2. 定义一个整型变量maxWidth用于存储最大宽度的值,并初始化为0。
  3. 创建一个队列q,用于层序遍历二叉树。将根节点入队。
  4. 进入循环,直到队列为空。每一次循环表示遍历二叉树的一层。
  5. 在每一层的开始时,获取当前队列中的节点个数levelSize(即该层的节点个数)。
  6. 更新maxWidth为max(maxWidth, levelSize),以确保记录最大宽度。
  7. 遍历当前层的所有节点,依次出队并判断其左右孩子是否存在,若存在则将其加入队列。
  8. 循环结束后,返回最大宽度。

注意:代码中使用了模板类和相应类模板BTNode,请确保这些相关定义在代码前已给出。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9166

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?