编写程序实现二叉排序树的查找c语言
时间: 2024-05-12 13:15:03 浏览: 92
以下是一个简单的二叉排序树的查找程序,C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉排序树的节点结构体
struct BSTNode {
int data; // 节点的数据
struct BSTNode *left; // 左子树指针
struct BSTNode *right; // 右子树指针
};
// 创建一个新节点
struct BSTNode *createNode(int data) {
struct BSTNode *newNode = (struct BSTNode *)malloc(sizeof(struct BSTNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 将一个节点插入到二叉排序树中
void insertNode(struct BSTNode **root, int data) {
if (*root == NULL) {
*root = createNode(data);
return;
}
if (data < (*root)->data) {
insertNode(&((*root)->left), data);
} else if (data > (*root)->data) {
insertNode(&((*root)->right), data);
}
}
// 在二叉排序树中查找某个节点
struct BSTNode *findNode(struct BSTNode *root, int data) {
if (root == NULL) {
return NULL;
}
if (root->data == data) {
return root;
} else if (data < root->data) {
return findNode(root->left, data);
} else {
return findNode(root->right, data);
}
}
int main() {
struct BSTNode *root = NULL;
insertNode(&root, 50);
insertNode(&root, 30);
insertNode(&root, 70);
insertNode(&root, 20);
insertNode(&root, 40);
insertNode(&root, 60);
insertNode(&root, 80);
printf("Enter a value to search: ");
int value;
scanf("%d", &value);
struct BSTNode *result = findNode(root, value);
if (result == NULL) {
printf("Value not found\n");
} else {
printf("Value found: %d\n", result->data);
}
return 0;
}
```
在这个程序中,我们首先定义了一个二叉排序树的节点结构体 `BSTNode`,其中包含了节点的数据 `data`,以及左右子树的指针 `left` 和 `right`。
然后,我们实现了两个函数。`createNode` 函数用于创建一个新的节点,`insertNode` 函数用于将一个节点插入到二叉排序树中。这两个函数都是递归实现的。
最后,我们实现了 `findNode` 函数,用于在二叉排序树中查找某个节点。这个函数也是递归实现的。
在 `main` 函数中,我们首先创建了一个二叉排序树,并插入了一些节点。然后,从用户输入中读取一个值,调用 `findNode` 函数查找这个值是否在二叉排序树中存在。如果存在,就输出节点的数据;否则,输出“Value not found”。
阅读全文