以二叉链表为储存结构,设计一个求二叉树叶子节点数的算法C语言完整代码
时间: 2024-10-22 22:29:38 浏览: 24
头歌数据结构二叉树的二叉链表存储及基本操作
5星 · 资源好评率100%
在C语言中,我们可以使用递归的方式遍历二叉树并计算叶子节点的数量,因为二叉链表实际上就是每个节点包含指向左孩子的指针、右孩子的指针以及存储数据的链接。以下是完整的算法代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉链表节点结构体
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} Node;
// 计算给定二叉链表的叶子节点数
int countLeaves(Node* root) {
if (root == NULL) {
return 0; // 如果根节点为空,返回0
} else if (root->left == NULL && root->right == NULL) { // 如果当前节点是叶子节点
return 1;
} else {
// 对左右子树分别递归计数,并相加
return countLeaves(root->left) + countLeaves(root->right);
}
}
int main() {
// 创建一个简单的二叉树示例
Node* root = malloc(sizeof(Node));
root->data = 1;
root->left = malloc(sizeof(Node));
root->left->data = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = malloc(sizeof(Node));
root->right->data = 3;
root->right->left = malloc(sizeof(Node));
root->right->left->data = 4;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = NULL;
int leafCount = countLeaves(root);
printf("二叉树的叶子节点数为: %d\n", leafCount);
// 清理内存
free(root->left);
free(root->right);
free(root);
return 0;
}
```
阅读全文