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
 
コード:
 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 }