用C或C++实现(1)基于二叉链表的二叉树存储表示结构(2)设计算法统计该二叉树中与给定值相等的数据元素个数
时间: 2023-06-13 12:02:42 浏览: 49
以下是基于二叉链表的二叉树存储表示结构的C代码实现:
```
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建二叉树
TreeNode* createTree() {
int val;
scanf("%d", &val);
if (val == -1) { // 如果当前节点的值为-1,则表示该节点为叶子节点
return NULL;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = val;
root->left = createTree();
root->right = createTree();
return root;
}
// 统计二叉树中与给定值相等的数据元素个数
int count(TreeNode* root, int val) {
if (root == NULL) { // 如果当前节点为空,则返回0
return 0;
}
int cnt = 0;
if (root->val == val) { // 如果当前节点的值等于给定值,则计数器加1
cnt++;
}
cnt += count(root->left, val); // 统计左子树中与给定值相等的数据元素个数
cnt += count(root->right, val); // 统计右子树中与给定值相等的数据元素个数
return cnt;
}
int main() {
TreeNode* root = createTree();
int val;
scanf("%d", &val);
int cnt = count(root, val);
printf("The number of nodes with value %d in the binary tree is %d.\n", val, cnt);
return 0;
}
```
上述代码中,我们首先定义了一个二叉树结构体 `TreeNode`,包含节点的值 `val`,左子树 `left` 和右子树 `right`。然后我们通过递归的方式创建二叉树,遇到值为-1的节点则表示该节点为叶子节点,返回空指针。接着,我们定义了一个 `count` 函数,统计二叉树中与给定值相等的数据元素个数,如果当前节点为空则返回0,否则计数器加1,然后递归统计左子树和右子树中与给定值相等的数据元素个数。最后在主函数中调用 `createTree` 创建二叉树,输入给定值,调用 `count` 统计数据元素个数并输出结果。
注意:上述代码中并没有进行内存释放,实际使用中需要注意内存泄漏问题。