标题: |
树的括号表示法 |
时 限: |
1000 ms |
内存限制: |
3000 K |
总时限: |
3000 ms |
描述: |
树的括号表示法: 先将根结点放入一对圆括号中,然后把它的子树按由左而右的顺序放入括号中,而对子树也采用同样方法处理:同层子树与它的根结点用圆括号括起来,同层子树之间用逗号隔开,最后用闭括号括起来。例如下图可写成如下形式 (a(b,c,d,e)) a / | | \ b c d e 现在给定一个多叉树的括号表示法,要求你创建多叉树,并按层序输出。 |
输入: |
多叉树的括号表示法:字符串 |
输出: |
层序输出多叉树 |
输入样例: |
(a(b,c,d,e)) |
输出样例: |
abcde |
提示: |
树的括号表示法 |
1 #include <stdio.h>
2 int level(char *str,char ch)
3 {
4 int i=0,Left=0,Right=0;
5 char c;
6 c=str[0];
7 while(c!=ch)
8 {
9 c=str[i];
10 i++;
11 if(c=='(') Left++;
12 if(c==')') Right++;
13 }
14 return Left-Right;
15 }
16 int main()
17 {
18 char str[200],ch,m_lev=0;
19 char m_c;
20 int m_i=0;
21 int i=0,Left=0;
22 scanf("%s",str);
23 ch=str[0];
24 while(ch!='\0')
25 {
26 ch=str[i];
27 if(ch=='(')
28 Left++;
29 i++;
30 }
31 //printf(" %c ",str[i-2]);
32 //printf("%c %d",str[10],level(str,str[10]));
33 m_c=str[0];
34 for (m_lev=1;m_lev<=Left;m_lev++)
35 {
36 while(m_c!='\0')
37 { m_c=str[m_i];
38 if(m_c!=','&&m_c!='('&&m_c!=')')
39 {
40 if(level(str,m_c)==m_lev)
41 printf("%c",m_c);
42 }
43
44 m_i++;
45 }
46 m_i=0;m_c=str[0];
47 }
48 printf("\n");
49 return 0;
50 }
2 int level(char *str,char ch)
3 {
4 int i=0,Left=0,Right=0;
5 char c;
6 c=str[0];
7 while(c!=ch)
8 {
9 c=str[i];
10 i++;
11 if(c=='(') Left++;
12 if(c==')') Right++;
13 }
14 return Left-Right;
15 }
16 int main()
17 {
18 char str[200],ch,m_lev=0;
19 char m_c;
20 int m_i=0;
21 int i=0,Left=0;
22 scanf("%s",str);
23 ch=str[0];
24 while(ch!='\0')
25 {
26 ch=str[i];
27 if(ch=='(')
28 Left++;
29 i++;
30 }
31 //printf(" %c ",str[i-2]);
32 //printf("%c %d",str[10],level(str,str[10]));
33 m_c=str[0];
34 for (m_lev=1;m_lev<=Left;m_lev++)
35 {
36 while(m_c!='\0')
37 { m_c=str[m_i];
38 if(m_c!=','&&m_c!='('&&m_c!=')')
39 {
40 if(level(str,m_c)==m_lev)
41 printf("%c",m_c);
42 }
43
44 m_i++;
45 }
46 m_i=0;m_c=str[0];
47 }
48 printf("\n");
49 return 0;
50 }