根据前序遍历的顺序创建一棵二叉树; 对二叉树进行前序、中序、后序遍历。用C语言写一个程序,完成上述要求
时间: 2024-12-28 10:39:46 浏览: 5
在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* buildTreeFromPreorder(int* preorder, int start, int end) {
if (start > end)
return NULL;
// 获取当前节点值
TreeNode* root = createNode(preorder[start]);
int rootIndex = start + 1; // 记录根节点在前序序列的位置
// 继续处理左子树和右子树
root->left = buildTreeFromPreorder(preorder, start + 1, rootIndex - 1);
root->right = buildTreeFromPreorder(preorder, rootIndex, end);
return root;
}
// 递归前序、中序、后序遍历
void printTraversal(TreeNode* node, char traversalType) {
if (node == NULL)
return;
switch (traversalType) {
case 'P': // 前序遍历 (根-左-右)
printf("%d ", node->val);
printTraversal(node->left, traversalType);
printTraversal(node->right, traversalType);
break;
case 'I': // 中序遍历 (左-根-右)
printTraversal(node->left, traversalType);
printf("%d ", node->val);
printTraversal(node->right, traversalType);
break;
case 'S': // 后序遍历 (左-右-根)
printTraversal(node->left, traversalType);
printTraversal(node->right, traversalType);
printf("%d ", node->val);
break;
default:
printf("Invalid traversal type.\n");
break;
}
}
int main() {
int preorder[] = {1, 2, 4, 5, 3, 6};
int n = sizeof(preorder) / sizeof(preorder[0]);
TreeNode* root = buildTreeFromPreorder(preorder, 0, n - 1);
printf("前序遍历: ");
printTraversal(root, 'P');
printf("\n");
printf("中序遍历: ");
printTraversal(root, 'I');
printf("\n");
printf("后序遍历: ");
printTraversal(root, 'S');
printf("\n");
return 0;
}
```
这个程序首先使用前序遍历创建了一个二叉树,然后分别进行了前序、中序和后序遍历,并打印出结果。
阅读全文