本题要求实现给定的二叉树的三种遍历。 函数接口定义: void Preorder(BiTree T); void Inorder(BiTree T); void Postorder(BiTree T); T是二叉树树根指针,Preorder、Inorder和Postorder分别输出给定二叉树的先序、中序和后序遍历序列,格式为一个空格跟着一个字符。
时间: 2024-02-24 16:55:48 浏览: 76
题目要求实现给定二叉树的三种遍历,先序遍历、中序遍历和后序遍历。我们可以采用递归的方式进行遍历,具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
struct TreeNode {
char val;
struct TreeNode *left;
struct TreeNode *right;
};
// 先序遍历
void Preorder(struct TreeNode* T) {
if (T == NULL) {
return;
}
printf("%c ", T->val); // 访问根节点
Preorder(T->left); // 访问左子树
Preorder(T->right); // 访问右子树
}
// 中序遍历
void Inorder(struct TreeNode* T) {
if (T == NULL) {
return;
}
Inorder(T->left); // 访问左子树
printf("%c ", T->val); // 访问根节点
Inorder(T->right); // 访问右子树
}
// 后序遍历
void Postorder(struct TreeNode* T) {
if (T == NULL) {
return;
}
Postorder(T->left); // 访问左子树
Postorder(T->right); // 访问右子树
printf("%c ", T->val); // 访问根节点
}
// 创建一个二叉树
struct TreeNode* CreateTree() {
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = 'A';
root->left = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->left->val = 'B';
root->left->left = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->left->left->val = 'D';
root->left->left->left = NULL;
root->left->left->right = NULL;
root->left->right = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->left->right->val = 'E';
root->left->right->left = NULL;
root->left->right->right = NULL;
root->right = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->right->val = 'C';
root->right->left = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->right->left->val = 'F';
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->right->right->val = 'G';
root->right->right->left = NULL;
root->right->right->right = NULL;
return root;
}
int main() {
struct TreeNode* T = CreateTree();
printf("先序遍历结果:");
Preorder(T);
printf("\n中序遍历结果:");
Inorder(T);
printf("\n后序遍历结果:");
Postorder(T);
return 0;
}
```
输出结果为:
```
先序遍历结果:A B D E C F G
中序遍历结果:D B E A F C G
后序遍历结果:D E B F G C A
```
需要注意的是,这里的二叉树是按照题目中给出的样例构造的,如果题目中给出的二叉树结构不同,需要相应地修改CreateTree函数中的代码。
阅读全文