C语言代码对输入的一个任意的关键字序列构造一棵二叉排序树,并且可以将该二叉排序树输出,实现查找算法。 要求各个操作均以函数的形式实现,在主函数中调用各个函数实现以下操作: (1) 任意输入关键字序列,建立二叉排序树,并按照中序遍历输出该二叉树。 (2) 在建立的二叉排序树中查找比数字(输入值,例如36),查找成功,则返回该数据,若未成功,则返回失败。 (3) 在有序表中查找数据元素(输入值,例如56),查找成功,则返回该数据,若未成功,则返回失败。
时间: 2024-03-17 14:43:33 浏览: 64
好的,以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉排序树结构体
typedef struct BSTNode {
int data;
struct BSTNode *left;
struct BSTNode *right;
} BSTNode;
// 插入节点
BSTNode* insert(BSTNode *root, int data) {
if (root == NULL) {
root = (BSTNode*) malloc(sizeof(BSTNode));
root->data = data;
root->left = NULL;
root->right = NULL;
} else if (data < root->data) {
root->left = insert(root->left, data);
} else {
root->right = insert(root->right, data);
}
return root;
}
// 中序遍历二叉排序树
void inorder_traversal(BSTNode *root) {
if (root != NULL) {
inorder_traversal(root->left);
printf("%d ", root->data);
inorder_traversal(root->right);
}
}
// 在二叉排序树中查找数据元素,若查找成功,则返回该数据,否则返回-1
int search_bst(BSTNode *root, int target) {
while (root != NULL) {
if (root->data == target) {
printf("查找成功,该数据为:%d\n", root->data);
return root->data;
} else if (root->data < target) {
root = root->right;
} else {
root = root->left;
}
}
printf("查找失败\n");
return -1;
}
// 在有序表中查找数据元素,若查找成功,则返回该数据,否则返回-1
int search(int arr[], int n, int target) {
int i;
for (i = 0; i < n && arr[i] < target; i++);
if (i < n && arr[i] == target) {
printf("查找成功,该数据为:%d\n", arr[i]);
return arr[i];
} else {
printf("查找失败\n");
return -1;
}
}
int main() {
BSTNode *root = NULL;
int n, i, target;
printf("请输入关键字序列的长度:");
scanf("%d", &n);
printf("请输入关键字序列:");
for (i = 0; i < n; i++) {
int data;
scanf("%d", &data);
root = insert(root, data);
}
printf("中序遍历二叉排序树:");
inorder_traversal(root);
printf("\n请输入要在二叉排序树中查找的数字:");
scanf("%d", &target);
search_bst(root, target);
int arr[] = {5, 10, 11, 15, 17, 19, 21, 25, 36, 38, 50, 51, 55, 57, 68};
int len = sizeof(arr) / sizeof(arr[0]);
printf("请输入要在有序表中查找的数字:");
scanf("%d", &target);
search(arr, len, target);
return 0;
}
```
输出结果为:
```
请输入关键字序列的长度:7
请输入关键字序列:7 1 8 3 6 5 4
中序遍历二叉排序树:1 3 4 5 6 7 8
请输入要在二叉排序树中查找的数字:6
查找成功,该数据为:6
请输入要在有序表中查找的数字:56
查找失败
```
阅读全文