Problem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
每组输入数据对应输出2行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。
Example Input
abc,,de,g,,f,,,
Example Output
cbegdfa
cgefdba
01 | #include<string.h> |
02 | typedef char qelement; |
03 | typedef struct node |
04 | { |
05 | qelement date; |
06 | struct node *l, *r; |
07 | }node; |
08 | char a[55]; |
09 | int flag; |
10 | struct node *creat() |
11 | { |
12 | struct node *root; |
13 | if (a[++flag] == ',' ) |
14 | { |
15 | root = NULL; |
16 | } |
17 | else |
18 | { |
19 | root = ( struct node *) malloc ( sizeof ( struct node)); |
20 | root -> date = a[flag]; |
21 | root->l = creat(); |
22 | root->r = creat(); |
23 | } |
24 | return root; |
25 | } |
26 | void mid( struct node *root) |
27 | { |
28 | if (root) |
29 | { |
30 | mid(root->l); |
31 | printf ( "%c" , root->date); |
32 | mid(root->r); |
33 | } |
34 | } |
35 | void hou( struct node *root) |
36 | { |
37 | if (root) |
38 | { |
39 | hou(root->l); |
40 | hou(root->r); |
41 | printf ( "%c" , root->date); |
42 | } |
43 | } |
44 | int main() |
45 | { |
46 | while ( gets (a) != NULL) |
47 | { |
48 | flag = -1; |
49 | struct node *root; |
50 | root = creat(); |
51 | mid(root); |
52 | printf ( "\n" ); |
53 | hou(root); |
54 | printf ( "\n" ); |
55 | } |
56 | return 0; |
57 | } |