根据前序遍历的顺序建立一棵二叉树,并根据遍历规则遍历二叉树。 打印输出。 实验要求 (1)根据前序遍历的顺序创建一棵二叉树; (2)对二叉树进行前序、中序、后序遍历。用c语言写一个程序完成上述要求
时间: 2024-12-13 20:15:38 浏览: 11
在C语言中,我们可以按照前序遍历(根节点 -> 左子树 -> 右子树)的顺序构建二叉树并进行遍历。这里是一个简单的例子,我们将用递归的方式实现:
```c
#include <stdio.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建新节点
TreeNode* newNode(int val) {
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 前序遍历函数
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val); // 输出当前节点值
preorderTraversal(root->left); // 遍历左子树
preorderTraversal(root->right); // 遍历右子树
}
}
// 中序遍历函数
void inorderTraversal(TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left); // 遍历左子树
printf("%d ", root->val); // 输出当前节点值
inorderTraversal(root->right); // 遍历右子树
}
}
// 后序遍历函数
void postorderTraversal(TreeNode* root) {
if (root != NULL) {
postorderTraversal(root->left); // 遍历左子树
postorderTraversal(root->right); // 遍历右子树
printf("%d ", root->val); // 输出当前节点值
}
}
// 主函数,用于测试
int main() {
// 这里假设你已经有了一个前序遍历数组,例如前序遍历为 {1, 2, 4, 5, 3}
int preorder[] = {1, 2, 4, 5, 3};
int n = sizeof(preorder) / sizeof(preorder[0]);
// 通过前序遍历重建二叉树
TreeNode* root = newNode(preorder[0]);
buildTreeFromPreorder(root, preorder + 1, n - 1);
// 打印前序、中序和后序遍历结果
printf("前序遍历: ");
preorderTraversal(root);
printf("\n");
printf("中序遍历: ");
inorderTraversal(root);
printf("\n");
printf("后序遍历: ");
postorderTraversal(root);
printf("\n");
return 0;
}
// 从前序遍历重建二叉树的辅助函数
void buildTreeFromPreorder(TreeNode** root, int* preorder, int size) {
if (*preorder == size) return; // 如果遍历结束,返回
TreeNode* temp = *root;
for (int i = 0; i < size; ++i) {
if (temp && preorder[i] == temp->val) {
// 找到当前节点,插入其左右子节点
temp->right = newNode(preorder[i + 1]); // 右子节点
temp->left = newNode(preorder[i + 2]); // 左子节点
break;
} else if (!temp) {
*root = newNode(preorder[i]); // 新建根节点
temp = *root;
}
}
// 递归处理剩余部分
buildTreeFromPreorder(&temp->right, preorder + i + 2, size - i - 2);
buildTreeFromPreorder(&temp->left, preorder, i);
}
```
这个程序首先通过前序遍历数组创建二叉树,然后分别执行前序、中序和后序遍历,并将结果打印出来。
阅读全文