版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Problem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
每组输入数据对应输出2行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。
Sample Input
abc,de,g,f,
Sample Output
cbegdfa
cgefdba
Hint
Source
xam
#include <stdio.h>
#include <string.h>
char str[100];
int k = 0;
typedef struct TreeNode
{
char data;
struct TreeNode* Lsubtree;
struct TreeNode* Rsubtree;
}Tree;
Tree* CreateTree(Tree *T)
{
char ch = str[k++];
if (ch == ',')
{
T = NULL;
}
else
{
T = (Tree*)malloc(sizeof(Tree));
T->data = ch;
T->Lsubtree = CreateTree(T->Lsubtree);
T->Rsubtree = CreateTree(T->Rsubtree);
}
return T;
}
void InOrder(Tree* T)
{
if (T != NULL)
{
InOrder(T->Lsubtree);
printf("%c", T->data);
InOrder(T->Rsubtree);
}
}
void PostOrder(Tree *T)
{
if (T != NULL)
{
PostOrder(T->Lsubtree);
PostOrder(T->Rsubtree);
printf("%c", T->data);
}
}
int main()
{
Tree* T;
while(scanf("%s",&str)!=EOF)
{
k = 0; // 重置数组索引
T = CreateTree(T); // 建树
InOrder(T);
printf("\n");
PostOrder(T);
printf("\n");
}
return 0;
}