问题描述 建立一棵二叉树,并对其进行遍历(先序、中序和后序),打印输出遍历结果。 基本要求 从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归 算法对其进行遍历(先序、中序和后序),将遍历结果打印输出。用C语言写算法
时间: 2023-12-25 21:02:45 浏览: 142
以下是使用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 *node = (TreeNode *)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 先序遍历
void preorderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
printf("%d ", root->val); // 打印结点值
preorderTraversal(root->left); // 遍历左子树
preorderTraversal(root->right); // 遍历右子树
}
// 中序遍历
void inorderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left); // 遍历左子树
printf("%d ", root->val); // 打印结点值
inorderTraversal(root->right); // 遍历右子树
}
// 后序遍历
void postorderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left); // 遍历左子树
postorderTraversal(root->right); // 遍历右子树
printf("%d ", root->val); // 打印结点值
}
// 递归创建二叉树
TreeNode *createBinaryTree() {
int val;
scanf("%d", &val);
if (val == -1) { // 输入-1表示该结点为空结点
return NULL;
}
TreeNode *root = createNode(val);
root->left = createBinaryTree();
root->right = createBinaryTree();
return root;
}
int main() {
printf("请输入先序遍历结果(以-1表示空结点):\n");
TreeNode *root = createBinaryTree(); // 创建二叉树
printf("先序遍历结果为:");
preorderTraversal(root); // 先序遍历二叉树
printf("\n中序遍历结果为:");
inorderTraversal(root); // 中序遍历二叉树
printf("\n后序遍历结果为:");
postorderTraversal(root); // 后序遍历二叉树
printf("\n");
return 0;
}
```
在程序中,我们首先定义了二叉树的结点结构体,然后编写了创建新结点的函数 `createNode()`。接着,我们实现了三种遍历算法:先序遍历、中序遍历和后序遍历。最后,我们通过递归方式创建二叉树,并按照先序遍历、中序遍历和后序遍历的顺序打印输出遍历结果。
阅读全文
相关推荐

















