用c语言求二叉树的叶子结点
时间: 2024-03-16 15:43:46 浏览: 204
以下是用 C 语言实现求二叉树叶子节点的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct node {
int data;
struct node *left;
struct node *right;
} Node;
// 创建二叉树
Node* createTree() {
int data;
scanf("%d", &data);
if (data == -1) { // -1 表示该节点为空
return NULL;
}
Node *node = (Node*)malloc(sizeof(Node));
node->data = data;
node->left = createTree();
node->right = createTree();
return node;
}
// 计算叶子节点数
int countLeafNodes(Node *root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return 1;
}
return countLeafNodes(root->left) + countLeafNodes(root->right);
}
int main() {
printf("请输入二叉树的节点数据:\n");
Node *root = createTree();
int count = countLeafNodes(root);
printf("叶子节点数为:%d\n", count);
return 0;
}
```
在这个示例中,我们首先定义了一个二叉树节点的结构体,包含节点的数据以及左右子节点的指针。然后,我们使用 `createTree()` 函数创建了一个二叉树,其中输入 -1 表示该节点为空。接着,我们使用 `countLeafNodes()` 函数计算二叉树的叶子节点数,该函数使用递归的方式遍历二叉树,当遇到叶子节点时返回 1,否则递归遍历左右子树并将结果相加。最后,我们在 `main()` 函数中输出叶子节点数。
阅读全文