Problem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
每组输入数据对应输出2行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。
Example Input
abc,,de,g,,f,,,
Example Output
cbegdfa
cgefdba
代码
#include <stdio.h>
#include <stdlib.h>
char str[51];
int i;
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree CreateBiTree(BiTree T)
{
char temp;
temp=str[i++];
if(temp==',')
T=NULL;
else{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=temp;
T->lchild=CreateBiTree(T->lchild);
T->rchild=CreateBiTree(T->rchild);
}
return T;
}
void InOrderTraverse(BiTree T)
{
if(!T)
return;
else{
InOrderTraverse(T->lchild);//递归遍历左子树
printf("%c",T->data);//访问根节点
InOrderTraverse(T->rchild);//递归遍历右子树
}
}
void PostOrderTraverse(BiTree T)
{
if(!T)
return;
else{
PostOrderTraverse(T->lchild);//递归遍历左子树
PostOrderTraverse(T->rchild);//递归遍历右子树
printf("%c",T->data);//访问根节点
}
}
int main()
{
while(~scanf("%s",str))
{
BiTree T;
T=(BiTree)malloc(sizeof(BiTNode));
i=0;
T=CreateBiTree(T);
InOrderTraverse(T);
printf("\n");
PostOrderTraverse(T);
printf("\n");
}
return 0;
}