层序遍历求二叉树的宽度 c语言
时间: 2024-11-27 22:24:40 浏览: 15
【C语言二叉树遍历实例】C语言二叉树遍历实例
层序遍历(也称广度优先搜索,BFS)用于求解二叉树的最大宽度,即同一层节点数的最大值。在C语言中,你可以使用队列数据结构来实现这个过程。以下是基本步骤:
1. 初始化两个变量,`width`记录当前层的最大节点数,`level`记录当前层级。
2. 创建一个队列,并将根节点入队。
3. 当队列不为空时,循环执行以下操作:
a. 弹出队首元素作为当前节点。
b. 更新`width`,如果当前节点不是第一个节点,则`width`取`width`和当前节点所在层级节点数较大者。
c. 如果当前节点有左右子节点,分别入队。
4. 遍历完一层后,将`level`加一,继续上述过程直到队列为空。
5. 最终`width`就是整个二叉树的最大宽度。
下面是简单的伪代码示例:
```c
int widthOfBinaryTree(Node* root) {
if (root == NULL) return 0;
queue<Node*> q;
q.push(root);
int level = 1, width = 1;
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; ++i) {
Node* node = q.front();
q.pop();
// 如果还有子节点,添加到队列
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
// 更新最大宽度
if (i > 0) width = max(width, size); // 或者 width += 1 (对于宽度连续的情况)
}
level++;
}
return width;
}
```
阅读全文