Problem Description
已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
Input
输入数据有多行,每一行是一个长度小于
50
个字符的字符串。
Output
按从上到下从左到右的顺序输出二叉树的叶子结点。
Example Input
abd,,eg,,,cf,,, xnl,,i,,u,,
Example Output
dfg uli
01 | #include<stdio.h> |
02 | #include<string.h> |
03 | #include<stdlib.h> |
04 | char s[55]; |
05 | int flag; |
06 | struct node |
07 | { |
08 | char date; |
09 | struct node *l, *r; |
10 | }; |
11 | struct node *creat() |
12 | { |
13 | struct node *root; |
14 | if (s[++flag] == ',' ) |
15 | { |
16 | root = NULL; |
17 | } |
18 | else |
19 | { |
20 | root = ( struct node *) malloc ( sizeof ( struct node)); |
21 | root->date = s[flag]; |
22 | root->l = creat(); |
23 | root->r = creat(); |
24 | } |
25 | return root; |
26 | } |
27 | void leaf( struct node *root) |
28 | { |
29 | int out = 0; |
30 | int in = 0; |
31 | struct node *p[10010]; |
32 | p[in++] = root; |
33 | while (out < in) |
34 | { |
35 | if (p[out]) |
36 | { |
37 | if (p[out]->l == NULL && p[out]->r == NULL) |
38 | { |
39 | printf ( "%c" , p[out]->date); |
40 | } |
41 | p[in++] = p[out]->l; |
42 | p[in++] = p[out]->r; |
43 | } |
44 | out++; |
45 | } |
46 | } |
47 | int main() |
48 | { |
49 | int n; |
50 | while ( gets (s) != NULL) |
51 | { |
52 | flag = -1; |
53 | struct node *root; |
54 | root = creat(); |
55 | n = strlen (s); |
56 | leaf(root); |
57 | printf ( "\n" ); |
58 | } |
59 | return 0; |
60 | } |
61 |