用C语言实现一个二叉搜索树,支持节点插入与搜索
时间: 2023-07-24 17:27:35 浏览: 102
好的,下面是一个简单的二叉搜索树的 C 语言实现,支持节点插入与搜索:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉搜索树的节点结构体
typedef struct node {
int data; // 节点存储的数据
struct node* left; // 左子节点指针
struct node* right; // 右子节点指针
} Node;
// 插入节点函数
Node* insert(Node* root, int data) {
// 如果根节点为空,直接将新节点作为根节点返回
if (root == NULL) {
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
new_node->left = NULL;
new_node->right = NULL;
return new_node;
}
// 如果插入的数据比根节点数据小,则递归插入到左子树中
if (data < root->data) {
root->left = insert(root->left, data);
}
// 如果插入的数据比根节点数据大,则递归插入到右子树中
else if (data > root->data) {
root->right = insert(root->right, data);
}
// 返回插入后的根节点
return root;
}
// 搜索节点函数
Node* search(Node* root, int data) {
// 如果根节点为空或者根节点数据就是要搜索的数据,则直接返回根节点
if (root == NULL || root->data == data) {
return root;
}
// 如果要搜索的数据比根节点数据小,则递归搜索左子树
if (data < root->data) {
return search(root->left, data);
}
// 如果要搜索的数据比根节点数据大,则递归搜索右子树
else {
return search(root->right, data);
}
}
// 主函数
int main() {
Node* root = NULL; // 根节点初始化为空
// 插入节点
root = insert(root, 5);
root = insert(root, 3);
root = insert(root, 7);
root = insert(root, 1);
root = insert(root, 9);
// 搜索节点
Node* node = search(root, 7);
if (node != NULL) {
printf("Found node with data: %d\n", node->data);
} else {
printf("Couldn't find node!\n");
}
return 0;
}
```
上述代码中,我们定义了一个 `Node` 结构体来表示二叉搜索树的节点,其中包含了节点存储的数据 `data` 以及左右子节点的指针 `left` 和 `right`。
我们实现了两个函数,一个是 `insert` 函数用于插入节点,另一个是 `search` 函数用于搜索节点。在 `insert` 函数中,我们首先判断当前根节点是否为空,如果为空则直接将新节点作为根节点返回;否则根据插入数据与根节点数据的比较结果,递归插入到左子树或右子树中。在 `search` 函数中,我们也是通过递归的方式,在左子树或右子树中搜索要查找的数据。
最后在主函数中,我们插入了几个节点,并通过 `search` 函数搜索了一个节点。
阅读全文