Posted By

nihorvati1 on 01/04/11


Tagged


Versions (?)

implementacija binarnog stabla pomoću polja


 / Published in: C++
 

  1. struct tcvor {
  2. int oznaka;
  3. bool koristen;
  4. };
  5. struct tstablo {
  6. struct tcvor polje[10000];
  7. };
  8.  
  9.  
  10. int ParentB (int i, tstablo *stablo){
  11. if (i == 1) return -1;
  12. if (stablo->polje[i].koristen){
  13. if (stablo->polje[i*2].koristen || stablo->polje[i*2+1].koristen)
  14. return i/2;
  15. }
  16. };
  17.  
  18. int LeftChildB (int i, tstablo *stablo){
  19. if (stablo->polje[i*2].koristen) return i*2;
  20. if (!stablo->polje[i*2].koristen) return -1;
  21. };
  22.  
  23. int RightChildB (int i, tstablo *stablo){
  24. if (stablo->polje[i*2+1].koristen) return i*2+1;
  25. if (!stablo->polje[i*2+1].koristen)return -1;
  26. };
  27.  
  28. int LabelB (int i, tstablo *stablo){
  29. if (stablo->polje[i].koristen && stablo->polje[i].oznaka >= 0)
  30. return stablo->polje[i].oznaka;
  31. if (!stablo->polje[i].koristen)
  32. return 0;
  33. };
  34.  
  35. void ChangeLabelB (int oznaka, int i, tstablo *stablo){
  36. if (oznaka%2 == 0){
  37. if (stablo->polje[i*2].koristen)
  38. stablo->polje[i*2].oznaka = oznaka;
  39. }
  40. else {
  41. if (stablo->polje[i*2+1].koristen)
  42. stablo->polje[i*2+1].oznaka = oznaka;
  43. }
  44. };
  45.  
  46. int RootB (tstablo *stablo){
  47. if (stablo->polje[1]) return 1;
  48. else return -1;
  49. };
  50.  
  51. void CreateLeftB (int oznaka, int i, tstablo *stablo){
  52. if (LeftChildB (i,stablo) == -1 || (!stablo->polje[i*2].koristen)){
  53. stablo->polje[i*2].oznaka = oznaka;
  54. stablo->polje[i*2].koristen = true;
  55. };
  56.  
  57. void CreateRightB (int oznaka, int i, tstablo *stablo){
  58. if (RightChildB (i,stablo) == -1 || (!stablo->polje[i*2+1].koristen)){
  59. stablo->polje[i*2+1].oznaka = oznaka;
  60. stablo->polje[i*2+1].koristen = true;
  61. }
  62. };
  63.  
  64. void DeleteB (int i, tstablo *stablo){
  65. if (stablo->polje[i*2].koristen){
  66. DeleteB (polje[i*2], stablo);
  67. stablo->polje[i*2].koristen = false;
  68. }
  69. if (stablo->polje[i*2+1].koristen){
  70. DeleteB (polje[i*2+1], stablo);
  71. stablo->polje[i*2+1].koristen = false;
  72. }
  73. if (stablo->polje[1].koristen){
  74. DeleteB(polje[1],stablo);
  75. stablo->polje[1].koristen = false;
  76. }
  77. };
  78.  
  79. void InitB (int korijen, tstablo *stablo){
  80. do{
  81. DeleteB (polje[i*2], stablo);
  82. DeleteB (polje[i*2+1], stablo);
  83. }while (i != 1);
  84. stablo->polje[1].oznaka = korijen;
  85. stablo->polje[1].koristen = true;
  86. };

Report this snippet  

You need to login to post a comment.