写出计算二叉树第 K 层结点数的C语言算法。
时间: 2024-12-13 07:20:38 浏览: 5
按层次遍历二叉树的算法
在C语言中,我们可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来计算二叉树的第K层节点数。这里以BFS为例,因为它更适合解决这类问题,因为二叉树的层次结构清晰。
以下是一个简单的广度优先搜索算法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 计算二叉树第k层节点数的函数
int levelOrderBottom(TreeNode* root, int k) {
if (root == NULL || k <= 0) return 0; // 空树或k小于等于0的情况
int queue[1000], front = -1, rear = -1;
queue[++rear] = root; // 首先将根节点入队
while (front < rear) { // 当队列非空
int size = rear - front;
if (size == k - 1) return rear - front; // 找到第k层,返回节点数
for (int i = 0; i < size; ++i) {
TreeNode* node = queue[front++];
if (node->left != NULL) queue[++rear] = node->left;
if (node->right != NULL) queue[++rear] = node->right;
}
}
return 0; // 如果没有找到第k层,返回0
}
int main() {
// 测试用例...
TreeNode* root = ...; // 初始化你的二叉树
int k;
printf("The number of nodes in the %dth level is: %d\n", k, levelOrderBottom(root, k));
return 0;
}
```
阅读全文