任意输入一组数据作为二叉排序树中结点的键值,创建一棵二叉排序树,然后对给定的值进行查找。写出代码,用c语言
时间: 2023-06-26 20:07:49 浏览: 189
以下是一个简单的二叉排序树的实现,包括插入节点和查找节点的功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉排序树结点定义
typedef struct node {
int key; // 键值
struct node* left; // 左子树
struct node* right; // 右子树
} Node;
// 插入键值为key的结点到二叉排序树中
void insert(Node** root, int key) {
// 如果当前节点为NULL,说明已经到达了叶子节点,可以插入新节点了
if (*root == NULL) {
*root = (Node*)malloc(sizeof(Node));
(*root)->key = key;
(*root)->left = NULL;
(*root)->right = NULL;
return;
}
// 如果当前结点键值大于key,就插入到左子树中
if (key < (*root)->key) {
insert(&((*root)->left), key);
}
// 如果当前结点键值小于等于key,就插入到右子树中
else {
insert(&((*root)->right), key);
}
}
// 在二叉排序树中查找键值为key的结点
Node* search(Node* root, int key) {
// 如果当前结点为NULL,说明已经到达了叶子节点,没有找到
if (root == NULL) {
return NULL;
}
// 如果当前结点键值等于key,就找到了
if (root->key == key) {
return root;
}
// 如果当前结点键值大于key,就在左子树中查找
if (key < root->key) {
return search(root->left, key);
}
// 如果当前结点键值小于key,就在右子树中查找
else {
return search(root->right, key);
}
}
int main() {
// 创建一个空的二叉排序树
Node* root = NULL;
// 输入一组数据作为二叉排序树中结点的键值
int data[] = { 5, 2, 8, 1, 3, 6, 9 };
// 插入结点
int i;
for (i = 0; i < sizeof(data) / sizeof(int); i++) {
insert(&root, data[i]);
}
// 查找结点
int key = 3;
Node* node = search(root, key);
if (node != NULL) {
printf("找到了键值为%d的结点\n", key);
}
else {
printf("没有找到键值为%d的结点\n", key);
}
return 0;
}
```
在代码中,我们首先定义了二叉排序树的结点类型Node,包括键值和左右子树。然后定义了插入和查找函数insert和search。插入函数首先判断当前结点是否为NULL,如果是就插入新结点;否则根据键值大小将新结点插入到左子树或右子树中。查找函数也类似,首先判断当前结点是否为NULL,如果是就返回NULL;否则判断键值是否等于要查找的值,如果是就返回当前结点;否则根据键值大小在左子树或右子树中继续查找。最后,在main函数中,我们创建一个空的二叉排序树,插入一组数据,然后查找给定的值3。
阅读全文