fork download
  1. // 2bun-ki
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. #define height 4
  7. #define MAX (1<<height) //ビットシフト演算 2^height と同じ
  8.  
  9. int t[MAX+1]; //配列外アクセス防止のためのダミーで+1
  10. int sz = 0;
  11.  
  12.  
  13. void initTree(int n){
  14. int i;
  15. for(i=0;i<MAX;i++){
  16. t[i] = -1;
  17. }
  18. }
  19.  
  20. void printA(){
  21. int i;
  22. for(i=1;i<MAX;i++) printf("%d ",t[i]);
  23. printf("\n");
  24. }
  25.  
  26. int goP(int i){
  27. if(i/2 == 0) return 0;
  28. else return i/2;
  29. }
  30.  
  31. int goL(int i){
  32. if(2*i >= MAX) return 0;
  33. else return 2*i;
  34. }
  35.  
  36. int goR(int i){
  37. if(2*i+1 >= MAX) return 0;
  38. else return 2*i+1;
  39. }
  40.  
  41. void insBT(int x){
  42. //ここを書き換える
  43. int k,i=1;
  44. for(k=0; k<height; k++){
  45. if(t[i]==-1){
  46. t[i]=x;
  47. sz+=1;
  48. return;
  49. }
  50.  
  51. if(x<t[i])
  52. i=goL(i);
  53.  
  54. else
  55. i=goR(i);
  56.  
  57. }
  58.  
  59. printf("Error : too high -> %d\n",x);
  60.  
  61. }
  62.  
  63. int main(void){
  64. int i,x,n;
  65. scanf("%d",&n);
  66. initTree(n);
  67. for(i=0;i<n;i++){
  68. scanf("%d",&x);
  69. insBT(x);
  70. }
  71. printA();
  72. return 0;
  73. }
  74.  
Success #stdin #stdout 0s 5284KB
stdin
6
13 3 5 2 21 8 
stdout
13 3 21 2 5 -1 -1 -1 -1 -1 8 -1 -1 -1 -1