设计一个程序,由给定的二叉树先序序列,建立其二叉链表存储结构,并求出二叉树的中序序列和后序序列,用户输入二叉树的先序序列,再输出中序序列和后序序列,。用C语言
时间: 2023-12-08 18:54:07 浏览: 87
建立二叉树,并输出二叉树的先序,中序和后序遍历序列,以及二叉树的叶子数
以下是基于递归的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode, *TreeNodePtr;
void createTree(TreeNodePtr *root) {
char ch;
scanf("%c", &ch);
if (ch == '#') {
*root = NULL;
} else {
*root = (TreeNodePtr) malloc(sizeof(TreeNode));
(*root)->data = ch;
createTree(&((*root)->left));
createTree(&((*root)->right));
}
}
void preOrder(TreeNodePtr root) {
if (root != NULL) {
printf("%c ", root->data);
preOrder(root->left);
preOrder(root->right);
}
}
void inOrder(TreeNodePtr root) {
if (root != NULL) {
inOrder(root->left);
printf("%c ", root->data);
inOrder(root->right);
}
}
void postOrder(TreeNodePtr root) {
if (root != NULL) {
postOrder(root->left);
postOrder(root->right);
printf("%c ", root->data);
}
}
int main() {
TreeNodePtr root = NULL;
printf("请输入二叉树的先序序列,以#表示空节点:\n");
createTree(&root);
printf("二叉树的先序遍历结果为:\n");
preOrder(root);
printf("\n二叉树的中序遍历结果为:\n");
inOrder(root);
printf("\n二叉树的后序遍历结果为:\n");
postOrder(root);
return 0;
}
```
运行效果如下:
```
请输入二叉树的先序序列,以#表示空节点:
AB#C##DE#G##F###
二叉树的先序遍历结果为:
A B C D E G F
二叉树的中序遍历结果为:
B C A E D G F
二叉树的后序遍历结果为:
C B G E F D A
```
阅读全文