任意输入一组数据作为二叉排序树中结点的键值,创建一棵二叉排序树,然后对给定的值进行查找。c语言
时间: 2024-02-01 11:13:53 浏览: 71
以下是一个简单的例子,展示了如何创建一个二叉排序树并对其进行查找:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
struct node {
int key;
struct node *left, *right;
};
// 插入节点的函数
struct node* insert(struct node* node, int key) {
// 如果树为空,则创建新节点
if (node == NULL) {
struct node* temp = (struct node*)malloc(sizeof(struct node));
temp->key = key;
temp->left = temp->right = NULL;
return temp;
}
// 如果节点的键值比要插入的键值大,则将其插入左子树
if (key < node->key)
node->left = insert(node->left, key);
// 如果节点的键值比要插入的键值小,则将其插入右子树
else if (key > node->key)
node->right = insert(node->right, key);
// 如果键值已经存在,则什么都不做
return node;
}
// 查找给定键值的节点的函数
struct node* search(struct node* root, int key) {
// 如果根节点为空或者它就是要查找的节点,则返回根节点
if (root == NULL || root->key == key)
return root;
// 如果根节点的键值比要查找的键值大,则在左子树中查找
if (root->key > key)
return search(root->left, key);
// 如果根节点的键值比要查找的键值小,则在右子树中查找
return search(root->right, key);
}
// 中序遍历二叉树的函数
void inorder(struct node* root) {
if (root != NULL) {
inorder(root->left);
printf("%d ", root->key);
inorder(root->right);
}
}
int main() {
struct node* root = NULL;
int keys[] = {8, 3, 1, 6, 7, 10, 14, 4};
// 创建二叉排序树
for (int i = 0; i < 8; i++)
root = insert(root, keys[i]);
// 中序遍历二叉排序树
printf("Inorder traversal of BST: ");
inorder(root);
printf("\n");
// 查找节点
int search_key = 7;
struct node* result = search(root, search_key);
if (result == NULL)
printf("%d not found in BST\n", search_key);
else
printf("%d found in BST\n", result->key);
return 0;
}
```
输出结果:
```
Inorder traversal of BST: 1 3 4 6 7 8 10 14
7 found in BST
```
在这个例子中,我们先创建了一个包含8个键值的数组,然后使用`insert()`函数将这些键值插入到二叉排序树中。接着,我们使用`inorder()`函数对二叉排序树进行中序遍历,以验证其是否按照顺序排列。最后,我们使用`search()`函数查找给定的键值是否存在于二叉排序树中。
阅读全文