任意输入一组数据作为二叉排序树中结点的键值,创建一棵二叉排序树,然后对给定的值进行查找。 用c语言
时间: 2024-03-23 13:36:56 浏览: 70
C语言 求一个二叉树中位于先序序列中第k个位置的结点的值.doc
好的,以下是创建二叉排序树并查找给定值的 C 语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉排序树结点的定义
typedef struct BSTNode {
int data; // 关键字
struct BSTNode *left; // 左子树
struct BSTNode *right; // 右子树
} BSTNode, *BSTree;
// 创建一棵二叉排序树
void createBSTree(BSTree *T, int key) {
if (!(*T)) { // 若二叉排序树为空,则新建一个结点
(*T) = (BSTree) malloc(sizeof(BSTNode));
(*T)->data = key;
(*T)->left = (*T)->right = NULL;
} else if (key < (*T)->data) { // 插入到左子树
createBSTree(&((*T)->left), key);
} else if (key > (*T)->data) { // 插入到右子树
createBSTree(&((*T)->right), key);
}
}
// 在二叉排序树中查找给定值
BSTree searchBSTree(BSTree T, int key) {
if (!T) { // 若二叉排序树为空,则查找失败
return NULL;
} else if (key == T->data) { // 若查找到了,则返回该结点
return T;
} else if (key < T->data) { // 在左子树中查找
return searchBSTree(T->left, key);
} else { // 在右子树中查找
return searchBSTree(T->right, key);
}
}
int main() {
BSTree T = NULL; // 初始化二叉排序树
int n, key;
printf("请输入数据个数:");
scanf("%d", &n);
printf("请输入数据:");
for (int i = 0; i < n; i++) {
scanf("%d", &key);
createBSTree(&T, key); // 将数据插入到二叉排序树中
}
printf("请输入要查找的值:");
scanf("%d", &key);
BSTree p = searchBSTree(T, key); // 查找给定值
if (p) {
printf("查找成功,该值在二叉排序树中。\n");
} else {
printf("查找失败,该值不在二叉排序树中。\n");
}
return 0;
}
```
运行程序后,按照提示输入数据个数和数据,然后输入要查找的值,就可以得到查找结果。
阅读全文