使用C语言实现动态输入数据构造排序二叉树并转化为平衡二叉树还要实现查找算法的代码
时间: 2024-04-09 17:28:16 浏览: 115
下面是使用C语言实现动态输入数据构造排序二叉树并转化为平衡二叉树,并实现查找算法的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 向二叉搜索树插入节点
Node* insertNode(Node* root, int data) {
if (root == NULL) {
return createNode(data);
}
if (data < root->data) {
root->left = insertNode(root->left, data);
} else if (data > root->data) {
root->right = insertNode(root->right, data);
}
return root;
}
// 将二叉搜索树转化为有序数组
void inorderTraversal(Node* root, int* arr, int* index) {
if (root != NULL) {
inorderTraversal(root->left, arr, index);
arr[*index] = root->data;
(*index)++;
inorderTraversal(root->right, arr, index);
}
}
// 根据有序数组构建平衡二叉树
Node* buildBalancedBST(int* arr, int start, int end) {
if (start > end) {
return NULL;
}
int mid = (start + end) / 2;
Node* root = createNode(arr[mid]);
root->left = buildBalancedBST(arr, start, mid - 1);
root->right = buildBalancedBST(arr, mid + 1, end);
return root;
}
// 在平衡二叉树中查找节点
Node* searchNode(Node* root, int key) {
if (root == NULL || root->data == key) {
return root;
}
if (key < root->data) {
return searchNode(root->left, key);
} else {
return searchNode(root->right, key);
}
}
// 释放二叉树节点的内存
void freeTree(Node* root) {
if (root != NULL) {
freeTree(root->left);
freeTree(root->right);
free(root);
}
}
int main() {
Node* root = NULL;
int n, data;
printf("请输入节点个数:");
scanf("%d", &n);
printf("请输入节点值:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &data);
root = insertNode(root, data);
}
int* arr = (int*)malloc(n * sizeof(int));
int index = 0;
inorderTraversal(root, arr, &index);
freeTree(root);
root = buildBalancedBST(arr, 0, n - 1);
printf("平衡二叉树构建完成!\n");
printf("请输入要查找的节点值:");
scanf("%d", &data);
Node* result = searchNode(root, data);
if (result != NULL) {
printf("找到了!\n");
} else {
printf("未找到!\n");
}
freeTree(root);
free(arr);
return 0;
}
```
这段代码首先会动态获取用户输入的节点个数和节点值,然后根据输入的节点值构建一个排序二叉树。接着,通过中序遍历将排序二叉树转化为有序数组。然后,利用有序数组构建平衡二叉树。最后,用户可以输入要查找的节点值,程序将在平衡二叉树中进行查找,并输出查找结果。
注意:这只是一个简单的示例代码,未进行输入验证和错误处理,请根据实际需求进行完善。
阅读全文