typedef struct TreeNode* BinTree;
struct TreeNode
{
int Key;
BinTree Left;
BinTree Right;
};
int Width(BinTree T)
{
BinTree p;
Queue Q;
int Last, temp_width, max_width;
temp_width = max_width = 0;
Q = CreateQueue(MaxElements);
Last = Queue_rear(Q);//初始化last的大小
if (T == NULL) return 0;
else {
Enqueue(T, Q);
while (!IsEmpty(Q)) {
p = Front_Dequeue(Q);//取队首元素并将对手元素出队
temp_width++;//用来计数
if (p->Left != NULL) Enqueue(p->Left, Q);
if (p->Right != NULL) Enqueue(p->Right, Q);
if (Queue_front(Q) > Last) //当前层次以扩展完,当前层次的左右孩子以入队
Last = Queue_rear(Q);//更新last的大小
if (temp_width > max_width) max_width = temp_width;//选取最大的数值
temp_width = 0;//当前层次统计完成,计数清零
} /* end-if */
} /* end-while */
return max_width;
} /* end-else */
}下列代码的功能是计算给定二叉树T的宽度。二叉树的宽度是指各层结点数的最大值。函数Queue_rear和Queue_front分别返回当前队列Q中队尾和队首元素的位置。...
最新推荐文章于 2024-09-29 14:05:03 发布
该博客主要介绍了如何计算一棵二叉树的最大宽度。通过使用队列进行层次遍历,逐层统计节点数量并更新最大宽度。算法首先创建队列,然后将根节点入队,接着在循环中不断取出队首元素,将其左右子节点入队,直到队列为空。在遍历过程中,记录每层的最大节点数,并返回最大宽度。

1781

被折叠的 条评论
为什么被折叠?



