题目描述
编写一个算法,使用链表存储结构按照先序建立一棵二叉树,并分别使用(先序、中序、后序)遍历输出二叉树。
二叉树的结点存储结果示意图如下:
左指针域 | 数据域 | 右指针域 |
typedef struct Node
{
char data;
struct Node* Lchild;
struct Node* Rchild;
}BiTree, * PBiTree;
输入
【输入说明】
第一行输入二叉树的结点,例如:abc##de#g##f###,其中#表述空格字符,也就是没有孩子结点
输出
【输出说明】
第一行输出先序遍历的结果,例如:abcdegf
第二行输出中序遍历的结果,例如:cbegdfa
第三行输出后序遍历的结果,例如:cgefdba
样例输入 Copy
abc##de#g##f###
样例输出 Copy
abcdegf cbegdfa cgefdba
【代码实现】
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
char data;
struct Node* Lchild;
struct Node* Rchild;
}BiTree, * PBiTree;
//创建二叉树
void CreateBiTree(PBiTree* bt)
{
char ch;
ch = getchar();
if (ch == '#')
{
*bt = NULL;
}
else
{
*bt = (PBiTree)malloc(sizeof(BiTree));
(*bt)->data = ch;
CreateBiTree(&((*bt)->Lchild));
CreateBiTree(&((*bt)->Rchild));
}
}
//先序遍历
void PreOrder(PBiTree root)
{
if (root != NULL)
{
printf("%c", root->data);
PreOrder(root->Lchild);
PreOrder(root->Rchild);
}
}
//中序遍历
void InOrder(BiTree* root)
{
if (root != NULL)
{
InOrder(root->Lchild);
printf("%c", root->data);
InOrder(root->Rchild);
}
}
//后序遍历
void PostOrder(BiTree* root)
{
if (root != NULL)
{
PostOrder(root->Lchild);
PostOrder(root->Rchild);
printf("%c", root->data);
}
}
int main()
{
PBiTree bt = NULL;
CreateBiTree(&bt);
PreOrder(bt);
printf("\n");
InOrder(bt);
printf("\n");
PostOrder(bt);
return 0;
}