Description
给定先序序列,按照该序列创建对应的二叉树,并输出其中序和后序序列。
Input
一行,二叉树按先序遍历序列,空指针用字符^占位
Output
两行,分别对应该二叉树的中序和后序序列
Sample Input
ABC^DEG^F^^
Sample Output
CBEGDFA
CGEFDBA
#include<malloc.h>
#include<stdio.h>
#define TElemType char
//二叉树的二叉链表的表示与实现
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//先序遍历
void PreOrderTarverse(BiTree T,void (*visit)(TElemType))
{
if(T)
{
visit(T->data) ;
PreOrderTarverse(T->lchild,visit);
PreOrderTarverse(T->rchild,visit);
}
}
//中序遍历
void InOrderTarverse(BiTree T,void (*visit)(TElemType))
{
if(T)
{
InOrderTarverse(T->lchild,visit);
visit(T->data);
InOrderTarverse(T->rchild,visit);
}
}
//后序遍历
void PostOrderTarverse(BiTree T,void (*visit)(TElemType))
{
if(T)
{
PostOrderTarverse(T->lchild,visit);
PostOrderTarverse(T->rchild,visit);
visit(T->data);
}
}
//先序创建二叉树 ,假设树中结点为字符型,以^代表为空结点
BiTree CreateBiTree()
{
char ch;
BiTree T;
ch=getchar();
if(ch=='^')
T=NULL;
else
{
T=(BiTNode*)malloc(sizeof(BiTNode));
T->data=ch;
T->lchild =CreateBiTree();
T->rchild =CreateBiTree();
}
return T;
}
void visit(char e)
{
printf("%c",e);
}
int main()
{
BiTree T;
T=CreateBiTree();
//中序序列
InOrderTarverse(T,visit);
//每个序列输出之后换行
printf("\n");
//后序序列
PostOrderTarverse(T,visit);
return 0;
}
版权声明:本文为weixin_46297583原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。