统计二叉树中值小于x的结点个数 C语言完整
时间: 2024-11-03 10:22:18 浏览: 36
erchashu.rar_erchashu_统计 二叉树 结点个数
5星 · 资源好评率100%
在C语言中,要统计一棵二叉树中值小于给定整数x的节点个数,你可以使用递归的方式遍历二叉树并跟踪计数。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct TreeNode {
int val; // 节点值
struct TreeNode *left; // 左子树指针
struct TreeNode *right; // 右子树指针
} TreeNode;
// 创建一个新的二叉树节点
TreeNode* createNode(int val) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->val = val;
newNode->left = newNode->right = NULL;
return newNode;
}
// 计算小于x的节点数量 - 递归辅助函数
int countNodesBelowX(TreeNode* node, int x) {
if (node == NULL) { // 如果节点为空,返回0
return 0;
}
// 如果当前节点值小于x,返回1加上左子树和右子树中小于x节点的数量
if (node->val < x) {
return 1 + countNodesBelowX(node->left, x) + countNodesBelowX(node->right, x);
} else { // 否则,只考虑左子树和右子树
return countNodesBelowX(node->left, x) + countNodesBelowX(node->right, x);
}
}
// 主函数,输入二叉树根节点和目标值x
int main() {
// 假设已经有一个构建好的二叉搜索树
TreeNode* root = createNode(5); // 根节点值
// ... 其他节点添加
int x = 10; // 目标值
int count = countNodesBelowX(root, x);
if (count > 0) {
printf("Number of nodes with value less than %d: %d\n", x, count);
} else {
printf("No nodes found with value less than %d.\n", x);
}
return 0;
}
```
在这个例子中,我们假设你已经有了一个二叉搜索树(所有节点都满足左子节点小于父节点、右子节点大于父节点的条件),如果树不是二叉搜索树,那么这个算法可能需要一些修改。
阅读全文