1、运行时从键盘输入先序序列,创建对应二叉树,再分别对其进行前、中、后序遍历,输出每个遍历序列。使用c语言
时间: 2024-10-23 19:14:33 浏览: 10
在C语言中,我们可以使用递归的方式实现这个功能。首先,我们需要一个结构体表示二叉树节点,并定义一些函数来处理输入的先序序列,构建二叉树,以及进行前序、中序和后续遍历。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建二叉树函数,根据先序遍历
TreeNode* createTree(int* pre, int n) {
if (n == 0)
return NULL;
TreeNode* root = malloc(sizeof(TreeNode));
root->val = pre[0];
int i = 1;
while (i < n && pre[i] != -1) { // -1通常用于标记遍历结束
if (pre[i + 1] > pre[0]) { // 根据左孩子大于根节点判断左子树
root->left = createTree(pre + i + 1, n - i - 1);
i++;
} else {
root->right = createTree(pre + i + 1, n - i - 1);
break; // 已找到右子树,跳出循环
}
}
return root;
}
// 遍历函数模板
void traverse(TreeNode* node, char type[], int level) {
if (node == NULL)
return;
for (int i = 0; i < level; ++i)
printf(" "); // 输出缩进
switch (type[0]) {
case 'p': // 前序遍历
printf("%d ", node->val);
traverse(node->left, type, level + 1);
traverse(node->right, type, level + 1);
break;
case 'm': // 中序遍历
traverse(node->left, type, level + 1);
printf("%d ", node->val);
traverse(node->right, type, level + 1);
break;
case 'l': // 后续遍历
traverse(node->left, type, level + 1);
traverse(node->right, type, level + 1);
printf("%d ", node->val);
break;
default:
printf("Invalid traversal type.\n");
}
}
int main() {
int pre[] = {1, 2, 4, 5, 3}; // 示例先序遍历序列
int n = sizeof(pre) / sizeof(pre[0]);
TreeNode* root = createTree(pre, n);
printf("Preorder Traversal: ");
traverse(root, "p", 0); // 前序遍历
printf("\n");
printf("Inorder Traversal: ");
traverse(root, "m", 0); // 中序遍历
printf("\n");
printf("Postorder Traversal: ");
traverse(root, "l", 0); // 后续遍历
free(root); // 释放内存
return 0;
}
```
阅读全文