主函数再用C语言改写以下
时间: 2024-10-19 08:14:08 浏览: 12
C语言程序设计:chapter01 C语言概述
当然,主函数已经包含了大部分关键操作,这里我将它稍微简化并注释说明:
```c
#include <stdio.h> // 引入标准输入输出库
// 省略其他函数定义... // 上述代码中定义的所有函数都保持不变
int main() {
// 读取节点总数
int n;
printf("请输入二叉树的节点总数: ");
scanf("%d", &n);
// 初始化结果数组
int output_sequence[3 * n]; // 存放先序、中序和后序遍历的结果,每种3*n是因为每个遍历可能有n个元素
// 从用户输入构建二叉树
tree* root = NULL;
for (int i = 0; i < n; i++) {
int input;
printf("请输入第 %d 个节点(空节点用 -1): ", i + 1);
scanf("%d", &input);
root = insert_to_bst(root, input); // 插入节点
}
// 执行遍历并填充结果数组
pre_order_traversal(root, output_sequence);
in_order_traversal(root, output_sequence + n); // 结果数组偏移n,因为前半部分已填好先序
post_order_traversal(root, output_sequence + 2*n); // 结果数组再偏移n,留给后序
// 输出遍历结果
printf("先序遍历序列:\t");
for (int i = 0; i < n; i++) {
printf("%d ", output_sequence[i]);
}
printf("\n");
printf("中序遍历序列:\t");
for (int i = 0; i < n; i++) {
printf("%d ", output_sequence[i + n]);
}
printf("\n");
printf("后序遍历序列:\t");
for (int i = 0; i < n; i++) {
printf("%d ", output_sequence[i + 2*n]);
}
printf("\n");
// 清理内存
free(root);
return 0;
}
```
这个版本的主函数更注重简洁性和易读性,用户交互和数据处理部分做了调整。注意,由于C语言的内存管理,我们还需要手动释放`root`所占用的内存。在循环结束后,通过`free(root)`来完成这一操作。
阅读全文