用C语言结构体编写程序实现二叉排序树查找
时间: 2024-05-16 11:18:23 浏览: 99
下面是一个用C语言结构体编写的二叉排序树查找程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉排序树的结构体
struct BSTNode {
int data;
struct BSTNode *left;
struct BSTNode *right;
};
// 插入节点
struct BSTNode* insert(struct BSTNode *node, int data) {
// 如果当前节点为空,创建一个新节点
if (node == NULL) {
struct BSTNode *temp = (struct BSTNode*) malloc(sizeof(struct BSTNode));
temp->data = data;
temp->left = NULL;
temp->right = NULL;
return temp;
}
// 如果当前节点不为空,比较插入值和当前节点的值
if (data <= node->data) {
node->left = insert(node->left, data);
} else {
node->right = insert(node->right, data);
}
return node;
}
// 查找节点
struct BSTNode* search(struct BSTNode *node, int data) {
// 如果当前节点为空或者当前节点的值就是要查找的值,返回当前节点
if (node == NULL || node->data == data) {
return node;
}
// 如果要查找的值小于当前节点的值,递归查找左子树
if (data < node->data) {
return search(node->left, data);
}
// 如果要查找的值大于当前节点的值,递归查找右子树
return search(node->right, data);
}
int main() {
struct BSTNode *root = NULL;
int n, i, x;
printf("请输入节点个数:");
scanf("%d", &n);
printf("请输入节点值:");
for (i = 0; i < n; ++i) {
scanf("%d", &x);
root = insert(root, x);
}
printf("请输入要查找的值:");
scanf("%d", &x);
struct BSTNode *result = search(root, x);
if (result == NULL) {
printf("未找到该节点\n");
} else {
printf("找到该节点,值为 %d\n", result->data);
}
return 0;
}
```
程序中定义了一个`BSTNode`结构体,其中包含了节点的值、左子树指针和右子树指针。`insert`函数实现了插入节点的功能,`search`函数实现了查找节点的功能。在`main`函数中,首先输入节点个数和节点值,然后输入要查找的值,最后调用`search`函数查找节点并输出结果。
阅读全文