C语言编写递归求叶子结点的个数
时间: 2024-10-18 09:06:45 浏览: 35
在C语言中,递归是一种常见的解决问题技巧,特别是用于遍历树形结构。为了计算二叉树的叶子节点(即没有子节点的节点)的数量,你可以定义一个递归函数,这个函数会检查当前节点是否为叶子,如果是,则计数加一,并递归地对左子树和右子树进行同样的操作。
下面是一个简单的例子:
```c
#include <stdio.h>
// 假设我们有一个二叉树结构定义为:
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
int countLeaves(TreeNode* root) {
// 如果根节点为空,返回0
if (root == NULL)
return 0;
// 如果左右子节点都为空,这是一个叶子节点,计数加一
else if (root->left == NULL && root->right == NULL)
return 1;
// 否则,分别对左右子树递归调用此函数,然后相加得到总数
else
return countLeaves(root->left) + countLeaves(root->right);
}
int main() {
// 创建一个示例二叉树并打印叶子节点数
TreeNode* example = /* 构建二叉树 */;
int leafCount = countLeaves(example);
printf("The number of leaf nodes is: %d\n", leafCount);
return 0;
}
```
在这个示例中,`countLeaves` 函数是递归的核心部分。递归终止条件是遇到空节点,非叶子节点则继续向下递归直到找到所有叶子节点。
阅读全文