用c语言编写代码递归计算二叉树第i层节点的个数
时间: 2024-11-15 16:27:08 浏览: 52
在C语言中,我们可以使用递归来计算二叉树第i层的节点数。首先,我们需要定义一个结构体表示二叉树的节点,并实现一个递归函数`countNodesAtLevel(root, level)`。假设我们的二叉树节点结构如下:
```c
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左孩子指针
struct TreeNode* right; // 右孩子指针
} TreeNode;
```
接下来,我们定义递归函数,它接受当前节点、层级以及一个计数器作为输入:
```c
int countNodesAtLevel(TreeNode* root, int level, int nodeCount) {
if (root == NULL || level < 0) { // 如果根为空或层级无效,则返回计数
return nodeCount;
}
// 如果这是第一层,直接加一
if (level == 0) {
nodeCount++;
} else { // 否则递归检查左右子树
nodeCount = countNodesAtLevel(root->left, level - 1, nodeCount);
nodeCount = countNodesAtLevel(root->right, level - 1, nodeCount);
}
return nodeCount;
}
```
最后,你可以通过传入树的根节点和想要查询的层数来获取结果:
```c
int main() {
TreeNode* root = ...; // 初始化二叉树的根节点
int i = ...; // 想要知道第几层的节点数
int nodesOnLevel = countNodesAtLevel(root, i - 1, 0); // 减一是因为层数从0开始计数
printf("第%d层的节点数为:%d\n", i, nodesOnLevel);
return 0;
}
```
阅读全文