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. int k,i = 1;
  43. for(k=0;k<height;k++){
  44. if(t[i]==-1){
  45. t[i] = x;
  46. sz++;
  47. return;
  48. }
  49. if(x < t[i]) i = goL(i);
  50. else i = goR(i);
  51. }
  52. printf("Error : too high -> %d\n",x);
  53. }
  54.  
  55. int searchBT(int x){
  56. //ここを書く
  57. int k,i=1;
  58. for(k=0; k<height; k++){
  59. if(t[i]==x){
  60. return i;
  61. }
  62. if(x < t[i]) i = goL(i);
  63. else i = goR(i);
  64. }
  65.  
  66. return -1;
  67. }
  68.  
  69. int main(void){
  70. int i,x,y,n;
  71. scanf("%d %d",&n,&x);
  72. initTree(n);
  73. for(i=0;i<n;i++){
  74. scanf("%d",&y);
  75. insBT(y);
  76. }
  77. i = searchBT(x);
  78. if(i==-1) printf("x is not found\n");
  79. else printf("t[%d] = %d\n",i,x);
  80. return 0;
  81. }
  82.  
Success #stdin #stdout 0.01s 5276KB
stdin
6 5
13 3 5 2 21 8 
stdout
t[5] = 5