Posted By

atatlikon on 01/12/14


Tagged

opcenitostabloh


Versions (?)

opcenito_stablo.h


 / Published in: C++
 

URL: opcenito_stablo.h

SP 4 ZADATAK

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. struct tcvor{
  5. char oznaka;
  6. int dijete,brat;
  7. };
  8.  
  9. struct tstablo{
  10. tcvor cvorovi[10000];
  11. int korijen, kursor;
  12. };
  13.  
  14. void initT(char x,tstablo *t){
  15. t->korijen=0;
  16. t->kursor=1;
  17. for(int i=0;i<10000;i++){
  18. t->cvorovi[i].label='!';
  19. t->cvorovi[i].dijete = -1;
  20. t->cvorovi[i].brat = -1;
  21. }
  22. t->cvorovi[0].oznaka=x;
  23. };
  24.  
  25. int ParentT(int n, tstablo *t){
  26. if(n==t->korijen||t->cvorovi.oznaka=='!') return -1;
  27. for(int i=0;i<10000;i++){
  28. int k=t->cvorovi.dijete;
  29. if(k==-1)continue;
  30. if(k==n)return i;
  31. while(t->cvorovi[k].brat != -1){
  32. if (t->cvorovi[k].brat == n)
  33. return i;
  34. }
  35. }
  36. };
  37.  
  38. int FirstChildT(int n, tstablo *t){
  39. return t->cvorovi.dijete;
  40. };
  41.  
  42. int FirstSiblingT(int n,tstablo *t){
  43. return t->cvorovi.brat;
  44. };
  45.  
  46. char LabelT(int n, tstablo*t){
  47. return t->cvorovi.oznaka;
  48. }
  49.  
  50. int RootT(tstablo *t){
  51. return t->korijen;
  52. }
  53.  
  54. int CreateT(char x, int n, tstablo *t){
  55. int m = 1;
  56. bool nadjeno = false;
  57. while(LabelT(m,T) != '!'){
  58. m++;
  59. }
  60. if(m==-1)
  61. return -1;
  62.  
  63. if(t->cvorovi[n].oznaka == '!') return false;
  64.  
  65. //Ako nema djece, ovo je prvo dijete
  66. if(t->cvorovi[n].dijete == -1){
  67. t->cvorovi[n].dijete = m;
  68. t->cvorovi[t->cvorovi[n].dijete].oznaka = x;
  69. return mjesto;
  70. }
  71.  
  72. // Ako ima djece, idi na zadnje
  73. int cvor = t->cvorovi[n].dijete;
  74. while(t->cvorovi[cvor].brat != -1)
  75. cvor = t->cvorovi[cvor].brat;
  76.  
  77. t->cvorovi[cvor].brat = m;
  78. t->cvorovi[m].oznaka = x;
  79. return mjesto;
  80. }
  81. }
  82.  
  83. bool ChangeLabelT(char x,int n, tstablo *t){
  84. if(t->cvorovi[n].oznaka == '!') return false;
  85.  
  86. t->cvorovi[n].oznaka = x;
  87. return true;
  88. }
  89.  
  90. bool DeleteT(int n, tstablo *t){
  91. int roditelj, prvi_brat;
  92. roditelj = ParentT(n,T);
  93. prvi_brat = t->cvorovi[roditelj].dijete;
  94.  
  95. //Cvor ne postoji
  96. if(t->cvorovi[n].oznaka == '!') return false;
  97.  
  98. //Ako ima djece obrisi djecu
  99. while(t->cvorovi[n].dijete != -1){
  100. int dijete = t->cvorovi[n].dijete;
  101. DeleteT(dijete,T);
  102. }
  103.  
  104. //Ako je prvo dijete roditelja, postavi brata za prvo dijete
  105. if(prvi_brat == n)
  106. t->cvorovi[ParentT(n,T)].dijete = t->cvorovi[n].brat;
  107.  
  108. //Ako ima bra�u prije i poslije, spoji ih
  109. else if(t->cvorovi[n].brat != -1){
  110. t->cvorovi[prvi_brat].brat = t->cvorovi[n].brat;
  111. }
  112.  
  113. t->cvorovi[n].oznaka = '!';
  114. return true;
  115. }

Report this snippet  

You need to login to post a comment.