请用 C 语言设计算法,求二叉树的叶子结点总数。
时间: 2024-12-16 20:31:55 浏览: 83
在C语言中,我们可以使用递归的方式来计算二叉树的叶子节点数。每个节点都有两个子节点,如果它是叶子节点,就没有子节点。所以我们只需要判断当前节点是否有左右子节点即可。
下面是一个简单的函数,假设二叉树的结构定义为`typedef struct TreeNode {int val; struct TreeNode* left; struct TreeNode* right;}`:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树的节点结构
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 计算二叉树叶子节点的函数
int countLeaves(TreeNode* root) {
if (root == NULL) { // 如果节点为空,返回0
return 0;
} else if (root->left == NULL && root->right == NULL) { // 如果节点既无左也无右,说明是叶子节点,返回1
return 1;
} else { // 否则,递归计算左右子树的叶子节点数
return countLeaves(root->left) + countLeaves(root->right);
}
}
// 示例用法
int main() {
// 初始化二叉树...
TreeNode* tree = ...;
int leafCount = countLeaves(tree);
printf("The number of leaves in the binary tree is: %d\n", leafCount);
return 0;
}
```
这个函数首先检查根节点是否为空,如果是,返回0。然后检查当前节点是否为叶子节点(即没有左右子节点),如果是,返回1。最后,对于有子节点的节点,继续递归地计算左右子树的叶子节点数,并将它们相加。
阅读全文
相关推荐












