Posted By

mateocindric on 01/19/15


Tagged

pokaziva binarno stablo


Versions (?)

bstablo_pokazivac.h


 / Published in: C++
 

bstablo_pokazivac.h

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct element{
  5. int oznaka;
  6. element *lijevi, *desni;
  7. };
  8.  
  9. typedef element* el;
  10. element *b_stablo=new element;
  11. element *pomoc;
  12.  
  13. void Initb(int x, element *b_stablo){
  14. b_stablo->oznaka=x;
  15. b_stablo->lijevi=NULL;
  16. b_stablo->desni=NULL;
  17. }
  18.  
  19. element *Parentb(element *trazi, element *b_stablo){
  20. element *a=NULL, *b=NULL;
  21. if(b_stablo->lijevi==trazi || b_stablo->desni==trazi)
  22. return b_stablo;
  23. if(b_stablo->lijevi!=NULL)
  24. a=Parentb(trazi, b_stablo->lijevi);
  25. if(b_stablo->desni!=NULL)
  26. b=Parentb(trazi, b_stablo->desni);
  27. if(a!=NULL)
  28. return a;
  29. if(b!=NULL)
  30. return b;
  31. return NULL;
  32. }
  33.  
  34. element *LeftChildb(element *b_stablo){
  35. return b_stablo->lijevi;
  36. }
  37.  
  38. element *RightChildb(element *b_stablo){
  39. return b_stablo->desni;
  40. }
  41.  
  42. element *Rootb(element *b_stablo){
  43. return b_stablo;
  44. }
  45.  
  46. int Labelb(element *b_stablo){
  47. return b_stablo->oznaka;
  48. }
  49.  
  50. void ChangeLabelb(int x, element *b_stablo){
  51. b_stablo->oznaka=x;
  52. }
  53.  
  54. bool CreateLeftb(int x, element *b_stablo){
  55. if(LeftChildb(b_stablo)!=NULL)
  56. return false;
  57. element *novi=new element;
  58. b_stablo->lijevi=novi;
  59. novi->oznaka=x;
  60. novi->lijevi=NULL;
  61. novi->desni=NULL;
  62. return true;
  63. }
  64.  
  65. bool CreateRightb(int x,element *b_stablo){
  66. if(RightChildb(b_stablo)!=NULL)
  67. return false;
  68. element *novi;
  69. novi=new element;
  70. novi->oznaka=x;
  71. b_stablo->desni=novi;
  72. novi->lijevi=NULL;
  73. novi->desni=NULL;
  74. return true;
  75. }
  76.  
  77. void Deleteb(element *cvor,element *b_stablo){
  78. if(cvor->lijevi!=NULL)
  79. Deleteb(cvor->lijevi,b_stablo);
  80. if(cvor->desni!=NULL)
  81. Deleteb(cvor->desni,b_stablo);
  82. if(cvor!=Rootb(b_stablo) && LeftChildb(Parentb(cvor, b_stablo))==cvor)
  83. Parentb(cvor,b_stablo)->lijevi=NULL;
  84. else if(cvor!=Rootb(b_stablo))
  85. Parentb(cvor,b_stablo)->desni=NULL;
  86. delete cvor;
  87. }
  88.  
  89. element *ALabel(element *b_stablo, int x){
  90. if(b_stablo->oznaka==x)
  91. return b_stablo;
  92. if(b_stablo->lijevi!=NULL)
  93. if(ALabel(b_stablo->lijevi,x)!=NULL)
  94. return ALabel(b_stablo->lijevi,x);
  95. if(b_stablo->desni!=NULL)
  96. if(ALabel(b_stablo->desni,x)!=NULL)
  97. return ALabel(b_stablo->desni,x);
  98. return NULL;
  99. }

Report this snippet  

You need to login to post a comment.