C语言编写一个二叉排序树,实现创建,查找,删除操作的代码
时间: 2024-03-09 12:49:35 浏览: 73
用C语言编写二叉排序树
下面是 C 语言编写的二叉排序树的代码,实现了创建、查找、删除操作:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node* left;
struct node* right;
} Node;
void insert(Node** root, int value) {
if (*root == NULL) {
*root = (Node*) malloc(sizeof(Node));
(*root)->data = value;
(*root)->left = NULL;
(*root)->right = NULL;
} else if (value < (*root)->data) {
insert(&(*root)->left, value);
} else if (value > (*root)->data) {
insert(&(*root)->right, value);
}
}
Node* search(Node* root, int value) {
while (root != NULL) {
if (value == root->data) {
return root;
} else if (value < root->data) {
root = root->left;
} else if (value > root->data) {
root = root->right;
}
}
return NULL;
}
void delete(Node** root, int value) {
if (*root == NULL) {
return;
} else if (value < (*root)->data) {
delete(&(*root)->left, value);
} else if (value > (*root)->data) {
delete(&(*root)->right, value);
} else {
if ((*root)->left == NULL && (*root)->right == NULL) {
free(*root);
*root = NULL;
} else if ((*root)->left == NULL) {
Node* temp = *root;
*root = (*root)->right;
free(temp);
} else if ((*root)->right == NULL) {
Node* temp = *root;
*root = (*root)->left;
free(temp);
} else {
Node* temp = (*root)->right;
while (temp->left != NULL) {
temp = temp->left;
}
(*root)->data = temp->data;
delete(&(*root)->right, temp->data);
}
}
}
void inorder(Node* root) {
if (root != NULL) {
inorder(root->left);
printf("%d ", root->data);
inorder(root->right);
}
}
int main() {
Node* root = NULL;
// 创建二叉排序树
insert(&root, 5);
insert(&root, 3);
insert(&root, 2);
insert(&root, 4);
insert(&root, 7);
insert(&root, 6);
insert(&root, 8);
// 查找元素
printf("元素 %d 存在于二叉排序树中\n", search(root, 4)->data);
// 删除元素
delete(&root, 4);
printf("删除元素 4 后的二叉排序树: ");
inorder(root);
return 0;
}
```
在 `main` 函数中创建了一个二叉排序树,然后调用 `search` 函数查找元素,最后调用 `delete` 函数删除元素。`inorder` 函数用于按照中序遍历的顺序输出二叉排序树中的元素。
阅读全文