Strukture stabla


/ Published in: C++
Save to your folder(s)

binarno stablo implementacija uz pomoc pokazivaca


Copy this code and paste it in your HTML
  1. #include<iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. struct element
  6. {
  7. string label;
  8. struct element *left, *right;
  9. };
  10.  
  11. typedef element *node;
  12. typedef element btree;
  13. //vrati prvo lijevo dijete zadanog cvora
  14. node LeftChildB(btree *stablo, node n)
  15. {
  16. return n->left;
  17. }
  18. //vrati prvo desno dijete zadanog cvora
  19. node RightChildB(btree *stablo, node n)
  20. {
  21. return n->right;
  22. }
  23. //ispisi oznaku koja se nalazi na zadanom cvoru
  24. void LabelB(btree *stablo, node n)
  25. {
  26. cout<<"Oznaka na zadanome cvoru je : "<< n->label<<endl;
  27. }
  28. void ChangeLabelB(string nova_vrijednost,node cvor, btree *stablo) {
  29. if(cvor==NULL)
  30. return;
  31. cout<<"Mijenjam vrijednost "<<cvor->label<<"\nu novu vrijednost: "<<nova_vrijednost<<endl;
  32. cvor->label = nova_vrijednost;
  33. }
  34. //vrati korijen stabla
  35. node RootB(btree *stablo)
  36. {
  37. return stablo;
  38. }
  39.  
  40. node ParentB(btree *stablo, node n) {
  41. if (n == stablo)//ako je cvor ==korijenu vrati 0
  42. return NULL;
  43.  
  44. node roditelj = NULL; //pom varijabla za roditelja
  45. if (stablo->left) {//ako trenutno stablo ima lijeve dijece idi lijevo
  46. if (stablo->left == n)
  47. return stablo; //ako je prvo lijevo dijete TRENUTNOG stabla jednako n vrati trenutni "korijen" stabla
  48. else
  49. roditelj = ParentB(n, stablo->left);//ako nije pronadjen "roditelj" idi dublje u stablo rekurzijom
  50. }
  51. if(stablo->right) {//ako trenutno stablo ima desne dijece idi desno
  52. if (stablo->right == n)
  53. return stablo;
  54. else
  55. roditelj = ParentB(n, stablo->right);
  56. }
  57. return roditelj; //ako stablo nema ni lijeve ni desne dijece vratit ce 0
  58. }
  59.  
  60. void CreateLeftB(btree *stablo, node n, string x)
  61. {
  62. if(n->left!=NULL)
  63. {
  64. cout <<"Cvor vec ima dijete...\n" << endl;
  65. return;
  66. }
  67. else
  68. {
  69. node lijevo = new element;
  70. lijevo->left = NULL;
  71. lijevo->right = NULL;
  72. lijevo->label = x;
  73. n->left = lijevo;
  74. }
  75. }
  76.  
  77. void CreateRightB(btree *stablo, node n, string x)
  78. {
  79.  
  80. if(n->right != NULL){
  81. cout <<"Cvor vec ima desno dijete...\n" << endl;
  82. return;
  83. }
  84. else
  85. {
  86. node desno = new element;
  87. desno->left = NULL;
  88. desno->right = NULL;
  89. desno->label = x;
  90. n->right = desno;
  91. }
  92. }
  93.  
  94.  
  95. void brisi(btree *stablo, node n)
  96. {
  97. if(n->left != NULL)
  98. brisi(stablo,LeftChildB(stablo,n));
  99. if(n->right != NULL)
  100. brisi(stablo,RightChildB(stablo,n));
  101. delete n;
  102. }
  103.  
  104.  
  105. void DeleteB(btree *stablo, node n)
  106. {
  107. node pom;
  108. //nadji roditelja elementa kojeg zelimo brisati i snimamo ga u pom
  109. pom = ParentB(stablo,n);
  110. if(LeftChildB(stablo,pom)==n)//ako je to lijevo dijete
  111. {
  112. pom->left = NULL;//taj pokazivac stavljamo na 0
  113. }
  114. else
  115. {
  116. pom->right = NULL;//ako je desno onda taj pokazivac stavljamo na 0
  117. }
  118. brisi(stablo,n);//brisemo cvor n i svo njegovo "potomstvo"
  119. }
  120.  
  121. void InitB (string x, node n){
  122. n->label=x;
  123. n->right=NULL;
  124. n->left=NULL;
  125. }

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.