3143二叉の木の遍歴(弔い)
8040 ワード
テーマリンク:http://www.wikioi.com/problem/3143/
タイトルは二叉の木をあげて、前の順序、中の順、後の順序を通してください.問題は簡単ですが、最初は自分で間違えて理解してしまいました.
この問題は自分の子供の番号を入力します.子供の値を入力するのではなく、例えば次のようなデータを与えます.
9
3 4
6 9
7 8
2 5
0
0
0
0
0
構成された木は、
1
3 4
7 8 2 5
6 9
コード:
タイトルは二叉の木をあげて、前の順序、中の順、後の順序を通してください.問題は簡単ですが、最初は自分で間違えて理解してしまいました.
この問題は自分の子供の番号を入力します.子供の値を入力するのではなく、例えば次のようなデータを与えます.
9
3 4
6 9
7 8
2 5
0
0
0
0
0
構成された木は、
1
3 4
7 8 2 5
6 9
コード:
1 #include <stdio.h>
2 #include <string.h>
3
4 // , , -----
5 int tree[20][3];
6 #define L 1
7 #define R 2
8
9 void tree_preorder(int i)
10 {
11 if(i!=0 )
12 {
13 printf("%d ",i);
14 tree_preorder(tree[i][L]);
15 tree_preorder(tree[i][R]);
16 }
17 }
18
19 void tree_inorder(int i)
20 {
21 if(i!= 0)
22 {
23 tree_inorder(tree[i][L]);
24 printf("%d ",i);
25 tree_inorder(tree[i][R]);
26 }
27
28 }
29 void tree_epilogue(int i)
30 {
31 if(i != 0)
32 {
33 tree_epilogue(tree[i][L]);
34 tree_epilogue(tree[i][R]);
35 printf("%d ",i);
36 }
37
38 }
39 int main()
40 {
41 int n,x,y;
42 while(~scanf("%d",&n))
43 {
44 memset(tree,0,sizeof(tree));
45 for(int i = 1; i <= n; i++)
46 {
47 scanf("%d%d",&x,&y);
48 tree[i][L] = x;
49 tree[i][R] = y;
50 }
51 tree_preorder(1);
52 printf("
");
53 tree_inorder(1);
54 printf("
");
55 tree_epilogue(1);
56 printf("
");
57 }
58 return 0;
59 }