用C语言实现 二叉排序树查找:手工输入 10 个字母,生成一棵二叉排序树,用递归算法打印树结构或分别输出先序和中序遍历序列以确认其结构。键盘输入待查找的字母,计算比较次数。分别用查找成功、不成功进行测试。
时间: 2024-12-30 12:38:07 浏览: 21
在C语言中,我们可以首先创建一个二叉搜索树节点的数据结构,并实现插入、构建二叉搜索树以及查找操作。以下是基本步骤:
1. 定义二叉树节点结构:
```c
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
2. 插入节点函数,用于构建二叉搜索树:
```c
TreeNode* insert(TreeNode* root, char key) {
if (root == NULL) {
return (TreeNode*)malloc(sizeof(TreeNode));
}
if (key < root->data)
root->left = insert(root->left, key);
else if (key > root->data)
root->right = insert(root->right, key);
return root;
}
```
3. 手动输入10个字母并构建二叉搜索树:
```c
int main() {
TreeNode* root = NULL;
for (int i = 0; i < 10; i++) {
char input;
scanf("%c", &input);
root = insert(root, input);
}
// ... 其他操作 ...
return 0;
}
```
4. 递归实现先序遍历和中序遍历:
```c
void inorderTraversal(TreeNode* node) {
if (node != NULL) {
inorderTraversal(node->left);
printf("%c ", node->data);
inorderTraversal(node->right);
}
}
void preorderTraversal(TreeNode* node) {
if (node != NULL) {
printf("%c ", node->data);
preorderTraversal(node->left);
preorderTraversal(node->right);
}
}
```
5. 查找功能,计算比较次数:
```c
int search(TreeNode* root, char key, int count) {
if (root == NULL || root->data == key) {
count++;
return count;
}
if (root->data > key)
return search(root->left, key, count);
else
return search(root->right, key, count + 1);
}
```
6. 主函数中测试查找功能:
```c
int main() {
// ... 构建二叉搜索树 ...
char lookup;
scanf("%c", &lookup);
int compareCount = search(root, lookup, 0);
if (compareCount == 0) {
printf("查找失败,字符未找到\n");
} else {
printf("查找成功,比较了 %d 次\n", compareCount);
}
// 输出先序遍历和中序遍历
printf("先序遍历: ");
preorderTraversal(root);
printf("\n中序遍历: ");
inorderTraversal(root);
return 0;
}
```
阅读全文