C语言求二叉树每层的结点数
时间: 2024-11-12 14:31:25 浏览: 34
在C语言中,计算二叉树每一层的节点数通常需要用到层次遍历(BFS, Breadth First Search)算法。下面是一个简单的步骤描述:
1. 初始化两个队列,一个用于存放待访问的节点,另一个用于存储当前层的节点计数。
2. 将根节点放入队列中,并将计数初始化为1(因为根节点在第一层)。
3. 当队列非空时,循环执行以下操作:
a. 弹出队首元素,记录该节点的数量(通常是1,除非它是叶子节点),并将计数加一。
b. 如果该节点有左孩子,将其加入队列;如果它有右孩子,也加入队列。
4. 每次从队列中弹出节点并增加计数后,都要检查是否还有节点可以处理。当队列为空,表示当前层已遍历完毕,此时所有节点的计数已经累计到了对应层的节点总数列表中。
5. 最终,你可以遍历这个列表得到每层的具体节点数。
如果你需要实际的C代码实现,这里提供一个简化版本,你需要根据实际数据结构调整:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 计算每层节点数
void levelOrder(TreeNode* root, int levels[], int& count) {
if (root == NULL) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; ++i) {
TreeNode* node = q.front();
q.pop();
levels[count++] = 1; // 假设每个节点都是单独一层
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
}
// 示例使用
int main() {
TreeNode* root = ...; // 填充你的二叉树结构
int levels[100]; // 假设最大层数不超过100
int count = 0;
levelOrder(root, levels, count);
// 输出每层的节点数
for (int i = 0; i < count; ++i)
printf("第 %d 层有 %d 个节点\n", i + 1, levels[i]);
return 0;
}
```
阅读全文