九度oj 题目1184:二叉树遍历

题目1184:二叉树遍历

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:4167

解决:1690

题目描述:

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。
例如如下的先序遍历字符串:
ABC##DE#G##F###
其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

输入:

输入包括1行字符串,长度不超过100。

输出:

可能有多组测试数据,对于每组数据,
输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。
每个输出结果占一行。

样例输入:
abc##de#g##f###
样例输出:
c b e g d f a 
分析:如数据结构课本上有一个先序构建二叉树的伪代码,然而问题在于这样重复输入字符串构造二叉树,解决办法是一行一行读入
字符串,当读入为空行时结束。读入的字符串在一个一个用来构造二叉树。
 1 #include <iostream>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <cstdio>
 5 using namespace std;
 6 
 7 char str[101];
 8 int x;
 9  
10 typedef struct node{
11     char c;
12     struct node *lchild, *rchild;
13 }TNode, *Tree;
14 
15 //TNode* Creat(){
16 //    if(str[x] == '#'){
17 //        x++;
18 //        return NULL;
19 //    }
20 //    TNode *T = new TNode;
21 //    T->c = str[x++];
22 //    T->lchild = Creat();
23 //    T->rchild = Creat();
24 //    return T;
25 //}
26 
27 
28 void Creat(Tree &T){
29     if(str[x] == '#'){
30         x++;
31         T = NULL;
32         return;
33     }
34     T = (TNode*)malloc(sizeof(TNode));//一定要开辟内存空间 
35     T->c = str[x++];
36     T->lchild = NULL;
37     T->rchild = NULL;
38     Creat(T->lchild);
39     Creat(T->rchild);
40     return;
41 }
42 
43 
44 void print(Tree T){
45     if(T == NULL)
46         return;
47     print(T->lchild);
48     printf("%c ", T->c);
49     print(T->rchild);
50 }
51 
52 int main(){
53     while(gets(str)){
54         x = 0;
55         Tree T;
56         //T = Creat();
57         Creat(T);
58         print(T);
59         printf("\n");
60     }
61     return 0;
62 }

 

 
posted @ 2017-03-11 17:03  琴影  阅读(2088)  评论(0编辑  收藏  举报