用c语言写一份完整的代码:【问题描述】 在一棵二叉查找树中查找所有大于a且小于b的元素【输入形式】 先从标准输入读取整数的个数,然后第二行开始输入各个整数,整数之间以一个空格分隔。 第三行输入数据a、b,之间以一个空格分隔。【样例输入】 13 50 38 30 64 58 40 10 73 70 50 60 100 35 36 48 【样例输出】 38 40
时间: 2024-02-17 17:03:09 浏览: 23
以下是用 C 语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
void insert(TreeNode** root, int val) {
if (*root == NULL) {
*root = (TreeNode*)malloc(sizeof(TreeNode));
(*root)->val = val;
(*root)->left = NULL;
(*root)->right = NULL;
return;
}
if (val < (*root)->val) {
insert(&(*root)->left, val);
} else {
insert(&(*root)->right, val);
}
}
void inorder(TreeNode* root, int* arr, int* size) {
if (root == NULL) {
return;
}
inorder(root->left, arr, size);
arr[(*size)++] = root->val;
inorder(root->right, arr, size);
}
int main() {
int n, i, a, b;
scanf("%d", &n);
TreeNode* root = NULL;
for (i = 0; i < n; i++) {
int val;
scanf("%d", &val);
insert(&root, val);
}
scanf("%d %d", &a, &b);
int* arr = (int*)malloc(sizeof(int) * n);
int size = 0;
inorder(root, arr, &size);
for (i = 0; i < size; i++) {
if (arr[i] > a && arr[i] < b) {
printf("%d ", arr[i]);
}
}
printf("\n");
return 0;
}
```
该代码使用二叉查找树实现了元素的插入和中序遍历,从而找到所有大于a且小于b的元素。时间复杂度为O(nlogn),其中n为二叉查找树中节点的个数。