c语言代码实现本关任务: 1.自行设计二叉排序树结构,并设计一个二叉排序树的创建函数,使用线性表L中的课程名称作为键值创建二叉排序树; 2.完成二叉排序树的查找功能。
时间: 2024-11-13 18:17:42 浏览: 40
在C语言中,我们可以使用结构体来表示二叉排序树节点,包含一个指向左孩子的指针、一个指向右孩子的指针以及一个数据域用于存储课程名称。以下是一个简单的二叉排序树结构体和相关的创建及查找函数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
char* name; // 课程名称
struct TreeNode* left; // 左孩子指针
struct TreeNode* right; // 右孩子指针
} Node;
// 创建一个新的二叉排序树节点
Node* createNode(char* name) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->name = malloc(strlen(name) + 1);
strcpy(newNode->name, name);
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入一个新节点到二叉排序树
void insert(Node** root, char* name) {
if (*root == NULL) {
*root = createNode(name);
} else {
if(strcmp(name, (*root)->name) < 0) {
insert(&(*root)->left, name);
} else {
insert(&(*root)->right, name);
}
}
}
// 查找特定课程名称是否存在于二叉排序树中
int search(Node* root, char* name) {
if (root == NULL || strcmp(root->name, name) == 0) {
return root != NULL;
} else if (strcmp(name, root->name) < 0) {
return search(root->left, name);
} else {
return search(root->right, name);
}
}
// 示例:主程序测试
int main() {
Node* root = NULL;
char courses[] = {"C", "Python", "Java", "C++", "JavaScript"};
for (int i = 0; i < sizeof(courses) / sizeof(courses[0]); i++) {
insert(&root, courses[i]);
}
// 查找示例
if (search(root, "Java")) {
printf("找到Java课程\n");
} else {
printf("未找到Java课程\n");
}
return 0;
}
```
阅读全文