从键盘输入一组数据作为二叉排序树中结点的键值,创建一颗二叉排序树,中序遍历并对指定数值进行查找,用C语言写出代码
时间: 2023-11-03 16:04:09 浏览: 85
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉排序树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 插入结点函数
TreeNode* insert(TreeNode* root, int val) {
if (root == NULL) {
TreeNode* new_node = (TreeNode*)malloc(sizeof(TreeNode));
new_node->val = val;
new_node->left = NULL;
new_node->right = NULL;
return new_node;
}
if (val < root->val) {
root->left = insert(root->left, val);
} else {
root->right = insert(root->right, val);
}
return root;
}
// 中序遍历函数
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%d ", root->val);
inorderTraversal(root->right);
}
// 查找函数
TreeNode* search(TreeNode* root, int val) {
if (root == NULL || root->val == val) {
return root;
}
if (val < root->val) {
return search(root->left, val);
} else {
return search(root->right, val);
}
}
int main() {
int n;
printf("请输入结点个数:");
scanf("%d", &n);
TreeNode* root = NULL;
printf("请输入结点的键值:");
for (int i = 0; i < n; i++) {
int val;
scanf("%d", &val);
root = insert(root, val);
}
printf("中序遍历结果为:");
inorderTraversal(root);
int target;
printf("\n请输入要查找的数值:");
scanf("%d", &target);
TreeNode* result = search(root, target);
if (result == NULL) {
printf("没找到 %d\n", target);
} else {
printf("找到了 %d\n", target);
}
return 0;
}
```
代码中使用递归实现了二叉排序树的插入、中序遍历和查找功能。在主函数中,通过输入结点个数和键值来创建二叉排序树,并且可以输入要查找的数值进行查找。
阅读全文