fork download
  1. // 2bun-ki
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. #define height 4
  7. #define MAX (1<<height)
  8.  
  9. int t[MAX+1]; //配列外アクセス防止のためのダミーで+1
  10. int sz = 0;
  11.  
  12. void swap(int *x, int *y){
  13. int tmp = *x;
  14. *x = *y;
  15. *y = tmp;
  16. }
  17.  
  18. void initTree(int n){
  19. int i;
  20. for(i=0;i<MAX;i++){
  21. t[i] = -1;
  22. }
  23. }
  24.  
  25. void printA(){
  26. int i;
  27. for(i=1;i<MAX;i++) printf("%d ",t[i]);
  28. printf("\n");
  29. }
  30.  
  31. int goP(int i){
  32. if(i/2 == 0) return 0;
  33. else return i/2;
  34. }
  35.  
  36. int goL(int i){
  37. if(2*i >= MAX) return 0;
  38. else return 2*i;
  39. }
  40.  
  41. int goR(int i){
  42. if(2*i+1 >= MAX) return 0;
  43. else return 2*i+1;
  44. }
  45.  
  46. void insBT(int x){
  47. int k,i = 1;
  48. for(k=0;k<height;k++){
  49. if(t[i]==-1){
  50. t[i] = x;
  51. sz++;
  52. return;
  53. }
  54. if(x < t[i]) i = goL(i);
  55. else i = goR(i);
  56. }
  57. printf("Error : too height -> %d\n",x);
  58. }
  59.  
  60. void printT(int i){
  61. int x = i;
  62. while(x/2!=0){
  63. printf(" ");
  64. x/=2;
  65. }
  66. printf("%d\n",t[i]);
  67. }
  68.  
  69. void preOrder(int i){
  70. //
  71. if(t[i]==-1){
  72. return;
  73. }
  74. printT(i);
  75. preOrder(goL(i));
  76. preOrder(goR(i));
  77. }
  78.  
  79. void inOrder(int i){
  80. //
  81. if(t[i]==-1){
  82. return;
  83. }
  84. inOrder(goL(i));
  85. printT(i);
  86. inOrder(goR(i));
  87. }
  88.  
  89. void postOrder(int i){
  90. //
  91. if(t[i]==-1){
  92. return;
  93. }
  94. postOrder(goL(i));
  95. postOrder(goR(i));
  96. printT(i);
  97. }
  98.  
  99. int main(void){
  100. int i,x,n;
  101. scanf("%d",&n);
  102. initTree(n);
  103. for(i=0;i<n;i++){
  104. scanf("%d",&x);
  105. insBT(x);
  106. }
  107. printf("== preOrder ====\n");
  108. preOrder(1);
  109. printf("\n");
  110. printf("== inOrder ====\n");
  111. inOrder(1);
  112. printf("\n");
  113. printf("== postOrder ====\n");
  114. postOrder(1);
  115. printf("\n");
  116. return 0;
  117. }
  118.  
Success #stdin #stdout 0s 5280KB
stdin
6
13 3 5 2 21 8 
stdout
== preOrder ====
13
  3
    2
    5
      8
  21

== inOrder ====
    2
  3
    5
      8
13
  21

== postOrder ====
    2
      8
    5
  3
  21
13