在一个非空二叉树中统计叶子节点个数 C语言代码
时间: 2024-03-09 13:45:40 浏览: 54
求二叉树的深度
4星 · 用户满意度95%
下面是一个简单的C语言代码,用于统计一个非空二叉树中叶子节点的个数:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结构体
typedef struct node {
int data;
struct node *left;
struct node *right;
} Node;
// 统计叶子节点个数的函数
int countLeafNodes(Node *root) {
if (root == NULL) {
return 0;
} else if (root->left == NULL && root->right == NULL) {
return 1;
} else {
return countLeafNodes(root->left) + countLeafNodes(root->right);
}
}
int main() {
// 创建一个二叉树
Node *root = (Node*) malloc(sizeof(Node));
root->data = 1;
root->left = (Node*) malloc(sizeof(Node));
root->left->data = 2;
root->right = (Node*) malloc(sizeof(Node));
root->right->data = 3;
root->left->left = (Node*) malloc(sizeof(Node));
root->left->left->data = 4;
root->left->right = (Node*) malloc(sizeof(Node));
root->left->right->data = 5;
root->right->left = (Node*) malloc(sizeof(Node));
root->right->left->data = 6;
root->right->right = (Node*) malloc(sizeof(Node));
root->right->right->data = 7;
// 统计叶子节点个数
int leafNodes = countLeafNodes(root);
printf("Leaf nodes: %d\n", leafNodes);
return 0;
}
```
在上述代码中,我们定义了一个二叉树结构体 `Node`,包含一个整数值 `data`,以及左右子节点的指针。我们使用递归的方式统计叶子节点的个数,如果当前节点为空,则返回0;如果当前节点左右子节点都为空,则返回1;否则递归遍历左右子树,并将结果相加。最后在 `main` 函数中创建一个二叉树,并调用 `countLeafNodes` 函数统计叶子节点的个数。
阅读全文