数据结构实验之二叉树二:遍历二叉树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
输入
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
输出
每组输入数据对应输出2行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。
示例输入
abc,,de,g,,f,,,
示例输出
cbegdfacgefdba
提示
来源
#include<bits/stdc++.h>
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
char s[100];
int a;
void Visit(BiTree T){//输出函数
if(T->data != ','){
cout<<T->data;
}
}
void midorder(BiTree T)//递归中序遍历
{
if(T)
{
midorder(T->lchild);
Visit(T);
midorder(T->rchild);
}
}
void postorder(BiTree T)//递归后序遍历
{
if(T)
{
postorder(T->lchild);
postorder(T->rchild);
Visit(T);
}
}
int CreateBiTree(BiTree &T){//建立二叉树
char data;
data=s[a++];
if(data == ','){
T = NULL;
}
else{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = data;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return 0;
}
int main()
{
BiTree T;
while(cin>>s)
{
a=0;
CreateBiTree(T);
midorder(T);
cout<<endl;
postorder(T);
cout<<endl;
}
return 0;
}