用c语言编写一个完整的代码关于求二叉树右子树中大于给定值的结点数量
时间: 2024-11-28 13:27:57 浏览: 21
在C语言中,我们可以使用递归的方式来遍历二叉树并计算右子树中大于给定值的节点数量。首先,我们需要定义二叉树结构以及一个辅助函数来判断节点值是否大于目标值。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 辅助函数,用于比较节点值和目标值
int isGreater(int node_val, int target) {
return node_val > target;
}
// 计算右子树中大于给定值的节点数量
int countNodesRightGreaterThan(TreeNode* root, int target) {
if (root == NULL) {
// 如果当前节点为空,返回0
return 0;
} else {
// 如果当前节点的右子节点存在并且大于目标值,计数加一
int right_count = (root->right && isGreater(root->right->val, target)) ? 1 : 0;
// 递归计算左子树中大于目标值的节点数量,并加上右子树的计数
int left_count = countNodesRightGreaterThan(root->left, target);
return left_count + right_count;
}
}
// 创建一个简单的二叉树示例
TreeNode* createBinaryTree() {
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 5;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 3;
root->left->right = (TreeNode*)malloc(sizeof(TreeNode));
root->left->right->val = 7;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 8;
root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right->left->val = 10;
return root;
}
int main() {
TreeNode* tree = createBinaryTree();
int target_value = 4; // 示例中的目标值
int result = countNodesRightGreaterThan(tree, target_value);
printf("右子树中大于 %d 的节点数量: %d\n", target_value, result);
// 清理内存
freeNode(tree);
return 0;
}
// 自定义函数来释放二叉树内存
void freeNode(TreeNode* node) {
if (node != NULL) {
freeNode(node->left);
freeNode(node->right);
free(node);
}
}
```
在这个代码中,`createBinaryTree()`函数创建了一个简单的二叉树,`countNodesRightGreaterThan()`函数负责计算右子树中大于给定值的节点数量。注意,这只是一个基本的示例,实际应用中需要处理更复杂的情况。
阅读全文