使用C语言,创建一颗二叉查找树,将以下数据(100 45 67 32 12 4 8 90 87)插入到二叉树中; 查找 32 是否在上面二叉树中,如果属于该树,返回 True;不属于该树,返回 False。 查找二叉树中的最大元素与最小元素。 最后运行程序
时间: 2024-12-20 17:23:10 浏览: 6
在C语言中,我们通常会使用结构体表示二叉查找树节点,并定义相应的函数来实现插入、查找和获取最小/最大元素的操作。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉查找树结点
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入值到二叉查找树
Node* insert(Node* root, int value) {
if (root == NULL) {
return createNode(value);
}
if (value < root->data)
root->left = insert(root->left, value);
else if (value > root->data)
root->right = insert(root->right, value);
return root;
}
// 查找给定值
int search(Node* root, int value) {
if (root == NULL || root->data == value)
return root != NULL; // 如果找到或空,返回True,否则False
if (value < root->data)
return search(root->left, value);
else
return search(root->right, value);
}
// 找到最小和最大元素
void findMinMax(Node* root, int* min, int* max) {
if (root == NULL) {
*min = *max = -1; // 如果为空,设最小和最大为负数
return;
}
if (*min > root->data)
*min = root->data;
if (*max < root->data)
*max = root->data;
findMinMax(root->left, min, max);
findMinMax(root->right, min, max);
}
int main() {
Node* root = NULL;
int arr[] = {100, 45, 67, 32, 12, 4, 8, 90, 87};
int n = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < n; i++) {
root = insert(root, arr[i]);
}
int found = search(root, 32); // 查找32是否在树中
printf("32 exists in the tree: %d\n", found);
int min, max;
findMinMax(root, &min, &max); // 获取最小和最大元素
printf("Minimum element: %d\n", min);
printf("Maximum element: %d\n", max);
return 0;
}
```
这个程序首先初始化一个空的根节点,然后遍历数组,对每个元素进行插入操作。之后通过`search`函数查找32是否存在于树中,以及通过`findMinMax`函数找出最小和最大元素。
注意:这只是一个基本的实现,实际应用中可能会有额外的错误检查和优化。
阅读全文