Problem Description
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。
例如如下的先序遍历字符串:
ABC##DE#G##F###
其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。Input Description
输入包括1行字符串,长度不超过100。
Output Description
可能有多组测试数据,对于每组数据,
输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。
每个输出结果占一行。Sample Input
a#b#cdef##### a##Sample Output
a b f e d c a
用递归的方法来遍历
注意:第一组数据后面有一个‘\n’;
#include <iostream>
using namespace std;
typedef struct BiTNode
{
char data;//存储数据
struct BiTNode *lchild, *rchild;//左孩子,右孩子
}BiTNode, *BiTree;
int i = 0;//以用来计数
char ch1, ch2;
void Create(BiTree &T)
{
if (i == 0)
{
ch2 = ch1;
i = 1;
}
else
{
cin >> ch2;
}
if (ch2 == '#')
{
T = NULL;
}
else
{
T = new BiTNode;
T->data = ch2;
Create(T->lchild);
Create(T->rchild);
}
}
//中序遍历输出
void Print(BiTree &T)
{
if (T)
{
Print(T->lchild);
cout << T->data << " ";
Print(T->rchild);
}
}
int main()
{
BiTree T = new BiTNode;
while (scanf("%c", &ch1) != EOF)
{
Create(T);
Print(T);
//i = 0;
cout << endl;
}
return 0;
}