题目描述: 已知二叉树的一个按先序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
char str[55]; //存放字符串
int i = 0; //遍历字符串
void CreateTree(BiTree &T) //建立二叉树
{
if(str[i] == ',')
{
i ++;
T = NULL;
}
else
{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = str[i++];
CreateTree(T->lc);
CreateTree(T->rc);
}
}
void InOrder(BiTree &T) //中序遍历二叉树
{
if(T)
{
InOrder(T->lc);
printf("%c", T->data);
InOrder(T->rc);
}
}
void PostOrder(BiTree &T) //后序遍历二叉树
{
if(T)
{
PostOrder(T->lc);
PostOrder(T->rc);
printf("%c", T->data);
}
}
//完整代码如下
#include<stdio.h>
#include<stdlib.h>
char str[55];
int i;
typedef struct BiTNode
{
char data;
struct BiTNode *lc, *rc;
}BiTNode, *BiTree;
void CreateTree(BiTree &T)
{
if(str[i] == ',')
{
i ++;
T = NULL;
}
else
{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = str[i++];
CreateTree(T->lc);
CreateTree(T->rc);
}
}
void InOrder(BiTree &T)
{
if(T)
{
InOrder(T->lc);
printf("%c", T->data);
InOrder(T->rc);
}
}
void PostOrder(BiTree &T)
{
if(T)
{
PostOrder(T->lc);
PostOrder(T->rc);
printf("%c", T->data);
}
}
int main()
{
BiTree T;
while(~scanf("%s", str))
{
i = 0;
CreateTree(T);
InOrder(T);
printf("\n");
PostOrder(T);
printf("\n");
}
return 0;
}