用c语言1.构造一棵二叉树,树的形态如下图所示,打印出先序遍历、中序遍历、后序遍历的遍历序列。
时间: 2023-12-17 13:04:43 浏览: 107
这是一道比较经典的二叉树遍历问题,下面我给出一个C语言实现的代码,希望能对你有所帮助。
```
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
}TreeNode;
// 创建二叉树
TreeNode* createTree() {
char ch;
scanf("%c", &ch);
if (ch == '#') {
return NULL;
}
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = ch;
root->left = createTree();
root->right = createTree();
return root;
}
// 先序遍历
void preOrder(TreeNode *root) {
if (root == NULL) {
return;
}
printf("%c ", root->data);
preOrder(root->left);
preOrder(root->right);
}
// 中序遍历
void inOrder(TreeNode *root) {
if (root == NULL) {
return;
}
inOrder(root->left);
printf("%c ", root->data);
inOrder(root->right);
}
// 后序遍历
void postOrder(TreeNode *root) {
if (root == NULL) {
return;
}
postOrder(root->left);
postOrder(root->right);
printf("%c ", root->data);
}
int main() {
printf("请按照先序遍历的顺序输入二叉树节点,空节点用#表示:\n");
TreeNode *root = createTree();
printf("先序遍历结果为:");
preOrder(root);
printf("\n中序遍历结果为:");
inOrder(root);
printf("\n后序遍历结果为:");
postOrder(root);
printf("\n");
return 0;
}
```
在运行程序时,你需要按照先序遍历的顺序输入二叉树节点,空节点用#表示,例如对于下面这个二叉树:
```
A
/ \
B C
/ / \
D E F
```
你需要输入的先序遍历序列为:ABD###CE#F##。程序输出的结果如下:
```
请按照先序遍历的顺序输入二叉树节点,空节点用#表示:
ABD###CE#F##
先序遍历结果为:A B D C E F
中序遍历结果为:D B A E C F
后序遍历结果为:D B E F C A
```
阅读全文