Posted By

marfioren on 01/19/15


Tagged

main zadatak4


Versions (?)

main


 / Published in: C++
 

zadatak4

  1. #include <iostream>
  2. #include <cstring>
  3. #include "opcenito.h"
  4. #include "polja.h"
  5. using namespace std;
  6. int a[1000];
  7. void PreOrderT(stablo ot, onode n)
  8. {
  9. cout << LabelT(n, ot) << ' ';
  10.  
  11. if(FirstChildT(n, ot)!=-1)
  12. PreOrderT(ot, FirstChildT(n, ot));
  13.  
  14. if(NextSiblingT(n, ot)!=-1)
  15. PreOrderT(ot, NextSiblingT(n, ot));
  16. }
  17.  
  18.  
  19. void InOrderT(stablo ot, onode n)
  20. {
  21. if(FirstChildT(n, ot)!=-1)
  22. InOrderT(ot, FirstChildT(n, ot) );
  23.  
  24. cout << LabelT(n, ot) << ' ';
  25.  
  26. if(FirstChildT(n, ot)!=-1)
  27. {
  28. for(onode m=FirstChildT(n, ot); NextSiblingT(m, ot)!=-1; m=NextSiblingT(m, ot) )
  29. {
  30. InOrderT(ot, NextSiblingT(m, ot) );
  31. }
  32. }
  33. }
  34.  
  35.  
  36. void PostOrderT(stablo ot, onode n)
  37. {
  38. if(FirstChildT(n, ot)!=-1)
  39. PostOrderT(ot, FirstChildT(n, ot) );
  40.  
  41. cout << LabelT(n, ot) << ' ';
  42.  
  43. if(NextSiblingT(n, ot)!=-1)
  44. PostOrderT(ot, NextSiblingT(n, ot) );
  45. }
  46.  
  47. binNode pretrazi(int vrijednost, binNode rt, binStablo stablo_B) {
  48. if(LabelB(rt, stablo_B)==vrijednost)
  49. return rt;
  50.  
  51. binNode p = 0;
  52.  
  53. if(LeftChildB(rt, stablo_B)!=0) {
  54. p = pretrazi(vrijednost, LeftChildB(rt, stablo_B), stablo_B);
  55. if(p)
  56. return p;
  57. }
  58.  
  59. if(RightChildB(rt, stablo_B)!=0) {
  60. p = pretrazi(vrijednost, RightChildB(rt, stablo_B), stablo_B);
  61. if(p)
  62. return p;
  63. }
  64.  
  65. return p;
  66. }
  67. void Podesi(int a[], int n, int i)
  68. {
  69. int j,t;
  70.  
  71. j = 2 * i + 1;
  72. t = a[i];
  73.  
  74. while(j<n)
  75. {
  76. if(j < (n-1) && a[j] < a[j+1])j++;
  77. if(t >= a[j])break;
  78.  
  79. a[i] = a[j];
  80. i = j;
  81. j = 2*j+1;
  82. }
  83.  
  84. a[i] = t;
  85. }
  86.  
  87. void StvoriGomilu(int a[], int n)
  88. {
  89. int i;
  90. for(i=(n-2)/2;i>=0;i--)Podesi(a,n,i);
  91. }
  92.  
  93. void HeapSort(int a[], int n)
  94. {
  95. int i,t;
  96.  
  97. StvoriGomilu(a,n);
  98. for(i=n;i>=2;i--)
  99. {
  100. t = a[i-1];
  101. a[i-1] = a[0];
  102. a[0] = t;
  103.  
  104. Podesi(a,i-1,0);
  105. }
  106. }
  107.  
  108. int main(){
  109. int izbor;
  110. int izbor2;
  111. int brojac;
  112. brojac=0;
  113. int n,r,z;
  114. char znak[20];
  115. stablo stablo1 = InitT(0, stablo1);
  116. ChangeLabelT((char*)"K", 0, stablo1);
  117. binStablo stablo2 = InitB(0, stablo2);
  118. int hrpa[1000];
  119. binNode pomN;
  120. cout<<"Op�enito stablo: "<<endl;
  121. cout<<"Korijen opcenitog stabla : "<<"n="<<RootT(stablo1)<<" vrijednost korijena je "<<LabelT(RootT(stablo1), stablo1)<<endl;
  122. do{
  123. cout << endl;
  124. cout << " 1. Dodaj element u stablo" << endl;
  125. cout << " 2. Izbrisi element" << endl;
  126. cout << " 3. Ispis podataka o elementu" << endl;
  127. cout << " 4. Ophodenje stabla" << endl;
  128. cout << " 5. Binarno stablo" << endl;
  129. cout<<"Izbor: ";
  130. cin>>izbor;
  131. switch(izbor){
  132. case 1:
  133. cout << "n: ";
  134. cin >> n;
  135. cout << "roditelj elementa: ";
  136. cin >> r;
  137. CreateT(n, r, stablo1);
  138. cout << "Vrijednost elementa: ";
  139. cin >> znak;
  140. ChangeLabelT(znak, n, stablo1);
  141. break;
  142.  
  143. case 2:
  144. cout << "n: ";
  145. cin >> n;
  146. DeleteT(n, stablo1);
  147. break;
  148.  
  149. case 3:
  150. cout << "n: ";
  151. cin >> n;
  152. if(ParentT(n, stablo1)!=-1)
  153. cout << "Roditelj elementa: " << LabelT(ParentT(n, stablo1), stablo1) << "(" << ParentT(n, stablo1) << ")" << endl;
  154. if(FirstChildT(n, stablo1)!=-1)
  155. cout << "Dijete elementa: " << LabelT(FirstChildT(n, stablo1), stablo1) << "(" << FirstChildT(n, stablo1) << ")" << endl;
  156. if(NextSiblingT(n, stablo1)!=-1)
  157. cout << "Brat elementa: " << LabelT(NextSiblingT(n, stablo1), stablo1) << "(" << NextSiblingT(n, stablo1) << ")" << endl;
  158. break;
  159. case 4:
  160. cout << " 1.Preorder, 2.Inorder, 3.Postorder" << endl;
  161. cout<<"Izbor: ";
  162. cin>>izbor2;
  163. if(izbor2==1) PreOrderT(stablo1, RootT(stablo1));
  164. else if(izbor2==2) InOrderT(stablo1, RootT(stablo1));
  165. else if(izbor2==3) PostOrderT(stablo1, RootT(stablo1));
  166. break;
  167. }
  168. }while(izbor!=5);
  169.  
  170. cout<<"Binarno stablo: "<<endl;
  171. cout << "Korijen binarnog stabla: " << LabelB(RootB(stablo2), stablo2) << endl;
  172. do{
  173. cout << " 1. Dodaj lijevo dijete" << endl;
  174. cout << " 2. Dodaj desno dijete" << endl;
  175. cout << " 3. Izbrisi element" << endl;
  176. cout << " 4. Ispisi element" << endl;
  177. cout << " 4. Heap sort" << endl;
  178. cout << " 5. Kraj" << endl;
  179. cin>>izbor;
  180. switch(izbor){
  181. case 1:
  182. cout << "Vrijednost roditelja: ";
  183. cin >> r;
  184. pomN = pretrazi(r, RootB(stablo2), stablo2);
  185. if(pomN==0)
  186. break;
  187. if(LeftChildB(pomN, stablo2)!=0) {
  188. cout << "Nemoguce dodati dijete, lijevo dijete vec postoji." << endl;
  189. break;
  190. }
  191. cout << "Vrijednost elementa: ";
  192. cin >> r;
  193. CreateLeftB(r, pomN, stablo2);
  194. brojac++;
  195. a[brojac]=r;
  196. break;
  197. case 2:
  198. cout << "Vrijednost roditelja: ";
  199. cin >> r;
  200. pomN = pretrazi(r, RootB(stablo2), stablo2);
  201. if(n==0)
  202. break;
  203. if(RightChildB(pomN, stablo2)!=0) {
  204. cout << "Nemoguce dodati dijete, desno dijete vec postoji." << endl;
  205. break;
  206. }
  207. cout << "Vrijednost elementa: ";
  208. cin >> r;
  209. CreateRightB(r, pomN, stablo2);
  210. brojac++;
  211. a[brojac]=r;
  212. break;
  213.  
  214. case 3:
  215. cout << "Vrijednost elementa: ";
  216. cin >> r;
  217. pomN = pretrazi(r, RootB(stablo2), stablo2);
  218. if(pomN!=0)
  219. DeleteB(pomN, stablo2);
  220. for(int i=0; i<=brojac; i++){
  221. if(a[i]==r){
  222. int j=i;
  223. do{
  224. a[j]=a[j+1];
  225. j++;
  226. }while(j<=brojac);
  227. break;
  228. }
  229. }
  230. brojac--;
  231.  
  232. break;
  233. case 4:
  234. a[0]=0;
  235. cout<<"Poredak elemenata nakon heapsorta:"
  236. HeapSort(a, brojac);
  237. cout<<endl;
  238. for(int i=0; i<=brojac; i++){
  239. cout<<a[i]<<" ";
  240. }
  241. cout<<endl;
  242. break;
  243. case 5:
  244. break;
  245.  
  246. }
  247.  
  248.  
  249.  
  250. }while(izbor!=6);
  251. system("pause");
  252. return 0;
  253. }

Report this snippet  

You need to login to post a comment.