对一组输入数据构建相应的二叉排序树,并利用其中序遍历对数据进行升序排序的C语言代码
时间: 2024-05-16 15:13:15 浏览: 99
以下是对一组输入数据构建相应的二叉排序树,并利用其中序遍历对数据进行升序排序的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉排序树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 插入结点函数
TreeNode* insert(TreeNode* root, int val) {
if (root == NULL) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
if (val < root->val) {
root->left = insert(root->left, val);
} else {
root->right = insert(root->right, val);
}
return root;
}
// 中序遍历二叉排序树并存储结果
void inorderTraversal(TreeNode* root, int* arr, int* idx) {
if (root == NULL) {
return;
}
inorderTraversal(root->left, arr, idx);
arr[(*idx)++] = root->val;
inorderTraversal(root->right, arr, idx);
}
// 升序排序函数
void sort(int* arr, int size) {
for (int i = 0; i < size; i++) {
for (int j = i + 1; j < size; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
int main() {
int n, val;
printf("请输入数据个数:");
scanf("%d", &n);
// 构建二叉排序树
TreeNode* root = NULL;
printf("请输入 %d 个数据:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &val);
root = insert(root, val);
}
// 中序遍历二叉排序树并存储结果
int* arr = (int*)malloc(sizeof(int) * n);
int idx = 0;
inorderTraversal(root, arr, &idx);
// 升序排序并输出结果
sort(arr, n);
printf("升序排序结果:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 释放内存
free(arr);
return 0;
}
```
这段代码中,我们首先定义了二叉排序树的结点结构体,然后实现了插入结点函数和中序遍历函数。在主函数中,我们首先读入数据并构建二叉排序树,然后中序遍历二叉排序树,将遍历结果存储到数组中,并使用冒泡排序算法对数组进行升序排序,最后输出排序结果。注意在程序结束时要释放动态分配的内存。
阅读全文