请给出一个可以运行的C语言代码,请键盘输入数据,可实现一棵二叉排序树,包括插入,删除,查找等功能
时间: 2023-07-28 22:09:43 浏览: 38
好的,以下是一个简单的实现,包含插入、删除和查找功能:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* left;
struct Node* right;
};
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
struct Node* insert(struct Node* root, int data) {
if (root == NULL) {
root = createNode(data);
} else if (data <= root->data) {
root->left = insert(root->left, data);
} else {
root->right = insert(root->right, data);
}
return root;
}
struct Node* findMin(struct Node* root) {
struct Node* current = root;
while (current->left != NULL) {
current = current->left;
}
return current;
}
struct Node* delete(struct Node* root, int data) {
if (root == NULL) {
return root;
} else if (data < root->data) {
root->left = delete(root->left, data);
} else if (data > root->data) {
root->right = delete(root->right, data);
} else {
if (root->left == NULL && root->right == NULL) {
free(root);
root = NULL;
} else if (root->left == NULL) {
struct Node* temp = root;
root = root->right;
free(temp);
} else if (root->right == NULL) {
struct Node* temp = root;
root = root->left;
free(temp);
} else {
struct Node* temp = findMin(root->right);
root->data = temp->data;
root->right = delete(root->right, temp->data);
}
}
return root;
}
struct Node* search(struct Node* root, int data) {
if (root == NULL) {
return NULL;
} else if (data == root->data) {
return root;
} else if (data < root->data) {
return search(root->left, data);
} else {
return search(root->right, data);
}
}
void inorder(struct Node* root) {
if (root != NULL) {
inorder(root->left);
printf("%d ", root->data);
inorder(root->right);
}
}
int main() {
struct Node* root = NULL;
int choice, value;
while (1) {
printf("\n1. Insert\n2. Delete\n3. Search\n4. Traverse\n5. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter value to insert: ");
scanf("%d", &value);
root = insert(root, value);
break;
case 2:
printf("Enter value to delete: ");
scanf("%d", &value);
root = delete(root, value);
break;
case 3:
printf("Enter value to search: ");
scanf("%d", &value);
if (search(root, value) == NULL) {
printf("%d not found.\n", value);
} else {
printf("%d found.\n", value);
}
break;
case 4:
printf("Inorder traversal: ");
inorder(root);
printf("\n");
break;
case 5:
exit(0);
default:
printf("Invalid choice.\n");
}
}
return 0;
}
```
这个代码实现了一个简单的二叉排序树,包含插入、删除和查找功能。在主函数中,我们使用了一个无限循环来不断接收用户输入,根据输入的选项调用对应的功能函数。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)