使用C语言,写一段程序代码,创建一颗二叉查找树,将以下数据(100 45 67 32 12 4 8 90 87)插入到二叉树中; 并查找 32 是否在上面二叉树中,如果属于该树,返回 True;不属于该树,返回 False。 最后查找二叉树中的最大元素与最小元素。
时间: 2024-12-20 18:22:57 浏览: 9
在C语言中,我们可以使用结构体定义二叉查找树节点,并编写函数来插入元素、查找元素以及找到最大和最小值。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建新节点
TreeNode* createNode(int val) {
TreeNode *newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入元素到二叉查找树
TreeNode* insert(TreeNode* root, int val) {
if (!root) {
return createNode(val);
}
if (val < root->val) {
root->left = insert(root->left, val);
} else {
root->right = insert(root->right, val);
}
return root;
}
// 查找元素
bool search(TreeNode* root, int val) {
if (!root || root->val == val) {
return (root != NULL);
}
if (val < root->val) {
return search(root->left, val);
}
return search(root->right, val);
}
// 找到最小和最大值
int findMinMax(TreeNode* root, int minVal, int maxVal) {
if (!root) {
return -1; // 树为空
}
if (!minVal || root->val < minVal) {
minVal = root->val;
}
if (!maxVal || root->val > maxVal) {
maxVal = root->val;
}
return findMinMax(root->left, minVal, maxVal) || findMinMax(root->right, minVal, maxVal);
}
int main() {
int arr[] = {100, 45, 67, 32, 12, 4, 8, 90, 87};
int arrSize = sizeof(arr) / sizeof(arr[0]);
TreeNode* root = NULL;
for (int i = 0; i < arrSize; i++) {
root = insert(root, arr[i]);
}
int target = 32;
bool found = search(root, target);
if (found) {
printf("Element %d is in the tree.\n", target);
} else {
printf("Element %d not found in the tree.\n", target);
}
int minInTree = -1, maxInTree;
minInTree = findMinMax(root, minInTree, maxInTree);
if (minInTree != -1) {
printf("Minimum element in the tree is %d\n", minInTree);
}
if (maxInTree != -1) {
printf("Maximum element in the tree is %d\n", maxInTree);
}
return 0;
}
```
这个程序首先创建了一个空的二叉查找树,然后遍历数组并将每个元素插入到树中。接着它检查目标元素32是否在树中。最后,通过递归寻找左子树和右子树中的最小和最大值,找出树内的最小和最大元素。
阅读全文