问题 : 二叉树的创建和文本显示
时间限制: 1 Sec 内存限制: 128 MB
提交: 3430 解决: 1512
[状态] [提交] [命题人:cyh]
题目描述
编一个程序,读入先序遍历字符串,根据此字符串建立一棵二叉树(以指针方式存储)。
例如如下的先序遍历字符串:
A ST C # # D 10 # G # # F # # #
各结点数据(长度不超过3),用空格分开,其中“#”代表空树。
建立起此二叉树以后,再按要求输出二叉树。
输入
输入由多组测试数据组成。
每组数据包含一行字符串,即二叉树的先序遍历,字符串长度大于0且不超过100。
输出
对于每组数据,显示对应的二叉树,然后再输出一空行。输出形式相当于常规树形左旋90度。见样例。 注意二叉树的每一层缩进为4,每一行行尾没有空格符号。
样例输入 Copy
A ST C # # D 10 # G # # F # # #
4 2 1 # # 3 # # 5 # 6 # #
样例输出 Copy
A
F
D
G
10
ST
C
6
5
4
3
2
1
下面是我的代码
#include<bits/stdc++.h>
using namespace std;
int depth = -1;
typedef struct BiTNode
{
char data[2];
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void CreateTree(BiTree &T)
{
char ch[2];
cin >> ch;
if(ch[0] == '#')
{
T = NULL;
}
else
{
T = new BiTNode;
strcpy(T->data,ch);
CreateTree(T->lchild);
CreateTree(T->rchild);
}
}
void PrintTree(BiTree T)
{
if(T != NULL)
{
depth++;
int daiti = depth;
PrintTree(T->rchild);
while(daiti)
{
cout << " ";
daiti--;
}
cout << T->data<<endl;
PrintTree(T->lchild);
depth--;
}
}
int main()
{
BiTree T = new BiTNode;
while(1)
{
CreateTree(T);
PrintTree(T);
cout << endl;
}
return 0;
}