数据结构实验之二叉树二:遍历二叉树
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
每组输入数据对应输出2行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。
Example Input
abc,,de,g,,f,,,
Example Output
cbegdfa
cgefdba
先序遍历:根 左子树 右子树
中序遍历: 左子树 根 右子树
后序遍历: 左子树 右子树 根
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode *Left,*Right;
}BiTNode,*BiTree;
string s;
int cnt;
void CreateBiTree(BiTree &T)
{
char c = s[++cnt];
if(c ==',') T = NULL;
else
{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = c;
CreateBiTree(T->Left);
CreateBiTree(T->Right);
}
}
void Visit(BiTree T)
{
if(T->data != '#') cout << T->data;
}
void PreOrder(BiTree T)
{
if(T != NULL)
{
Visit(T);
PreOrder(T->Left);
PreOrder(T->Right);
}
}
void InOrder(BiTree T)
{
if(T!=NULL)
{
InOrder(T->Left);
Visit(T);
InOrder(T->Right);
}
}
void BackOrder(BiTree T)
{
if(T!=NULL)
{
BackOrder(T->Left);
BackOrder(T->Right);
Visit(T);
}
}
int main()
{
BiTree T;
while(cin >> s)
{
cnt = -1;
CreateBiTree(T);
InOrder(T);
cout << endl;
BackOrder(T);
cout << endl;
}
return 0;
}