Posted By

AOT_code on 01/13/14


Tagged

binarno stablo opcenito Implementacije ophodnja


Versions (?)

Main.cpp


 / Published in: C++
 

Programski kod koji prikazuje funkcioniranje svih funkcija vezanih uz implementaciju binarnog i općenitog stabla.

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <windows.h>
  4. using namespace std;
  5.  
  6. #include "prvo_dijete_sljedeci_brat.h"
  7. #include "binarno_stablo_polje.h"
  8. #include "binarno_stablo_pokazivac.h"
  9. #include "ophodnja_stabla.h"
  10.  
  11. void opcenito_stablo(){
  12. int root, child, prov=0, br=0, choiceBr, chDel, brDel, odop;
  13. bool yes = true;
  14. char dn, dnL, newLabel;
  15. cout << "\nKreiranje stabla" << endl;
  16. cout << "----------------" << endl;
  17. cout << "Unesite korijen stabla: ";
  18. cin >> root;
  19.  
  20. tree* T = InitT(root, T);
  21. cout << "Korijen kreiranog stabla je: " << RootT(T) << endl << endl;
  22. do{
  23. if(!prov) br = root;
  24. else{
  25. cout << "Kojem broju zelite unesti potomke? ";
  26. cin >> br;
  27. }
  28. for(int i=0; i<3; i++){
  29. cout << "Unesite " << i+1 << ". potomka broju " << br << ": ";
  30. cin >> child;
  31. if(prov > 0) CreateT(child, br, T);
  32. else if(!prov) CreateT(child, root, T);
  33. }
  34. cout << "Zelite li unositi jos elemenata? (d/n): ";
  35. cin >> dn;
  36. if(dn == 'n') yes = false;
  37. else prov++;
  38. cout << endl;
  39. }while(yes);
  40. cout << "------------" << endl;
  41.  
  42. cout << "Prvo dijete korijena " << RootT(T) << " je: " << FirstChildT(root, T) << endl;
  43. cout << "Braca prethodnog cvora su (max. 2): ";
  44. if(NextSiblingT(FirstChildT(root, T), T) == -1) cout << "Ne postoji brat unesenom cvoru." << endl;
  45. else {
  46. cout << NextSiblingT(FirstChildT(root, T), T);
  47. cout << ", " << NextSiblingT(NextSiblingT(FirstChildT(root, T), T), T) << "." << endl;
  48. }
  49. if(prov) {
  50. cout << "\nPrvi potomak broja " << br << " je: " << FirstChildT(br, T) << endl;
  51. cout << "Braca prethodnog cvora su (max. 2): ";
  52. cout << NextSiblingT(FirstChildT(br, T), T);
  53. cout << ", " << NextSiblingT(NextSiblingT(FirstChildT(br, T), T), T) << "." << endl;
  54. }
  55.  
  56. do{
  57. cout << "\nOdabir operacija nad stablom" << endl;
  58. cout << "===========" << endl
  59. << "Sto zelite uraditi sa stablom? " << endl
  60. << "1. Ispisati oznaku odredenog cvora." << endl
  61. << "2. Izvrsiti ophodnju stabla." << endl
  62. << "3. Izbrisati cijelo ili cvor stabla." << endl
  63. << "0. Izlazak u glavni izbornik." << endl
  64. << "===========" << endl
  65. << "Koji je Vas odabir: " << endl;
  66. cin >> odop;
  67.  
  68. if(odop == 1){
  69. cout << "Kojem broju zelite ispisati oznaku? " << endl;
  70. cin >> choiceBr;
  71. cout << "Trenutna oznaka broja " << choiceBr << " je: " << LabelT(choiceBr, T) << endl;
  72. cout << "Zelite li promijeniti oznaku pretrazenog broja? (d/n): ";
  73. cin >> dnL;
  74. if(dnL == 'd'){
  75. cout << "Unesite novu oznaku: ";
  76. cin >> newLabel;
  77. ChangeLabelT(newLabel, choiceBr, T);
  78. cout << "Oznaka broja " << choiceBr << " sada je: " << LabelT(choiceBr, T) << endl << endl;
  79. }
  80. }
  81. if(odop == 2){
  82. int ch_oph;
  83. cout << "Odaberite vrstu ophodnje stabla (1 - PreOrder, 2 - InOrder, 3 - PostOrder): ";
  84. cin >> ch_oph;
  85. if(ch_oph == 1) cout << "\nPreorder: " << endl;
  86. if(ch_oph == 2) cout << "\nInOrder: " << endl;
  87. if(ch_oph == 3) cout << "\nPostOrder: " << endl;
  88. switch(ch_oph){
  89. case 1: PreOrder(T); break;
  90. case 2: InOrder(T); break;
  91. case 3: PostOrder(T); break;
  92. default: cout << "Unesena opcija nije podrzana!" << endl;
  93. }
  94. cout << endl;
  95. }
  96. if(odop == 3){
  97. cout << "Zelite li izbrisati cijeli stablo ili samo odredeni cvor stabla? (0 - cijeli stablo, 1 - odredeni cvor): ";
  98. cin >> chDel;
  99. if(!chDel){
  100. DeleteT(root, T);
  101. cout << "Kompletno stablo je izbrisano." << endl;
  102. }
  103. else{
  104. cout << "Unesite broj koji zelite izbrisati iz stabla: ";
  105. cin >> brDel;
  106. if(DeleteT(brDel, T)) cout << "Broj: " << brDel << " je uspjesno izbrisan iz stabla" << endl;
  107. else cout << "Doslo je do pogreske pri brisanju broja: " << brDel << ". Pokusajte ponovno." << endl;
  108. }
  109. cout << "----------------" << endl;
  110. }
  111. }while(odop);
  112. cout << "\nZa povratak u Glavni izbornik pritisnite: Enter";
  113. }
  114.  
  115. void binarno_stablo(){
  116. int choice, root, nodeL, nodeR, odop, childlR, childlL;
  117. cout << "\nZelite li kreirati binarno stablo: [1] - poljem ili [2] - pokazivacima? ";
  118. cin >> choice;
  119. cout << endl;
  120.  
  121. if(choice == 1){
  122. cout << "\nKreiranje binarnog stabla poljem." << endl;
  123. cout << "----------------" << endl;
  124.  
  125. cout << "Unesite korijen stabla: ";
  126. cin >> root;
  127. array_tree* T = array_InitB(root, T);
  128. cout << "Unesite lijevo dijete korijena: ";
  129. cin >> nodeL;
  130. array_CreateLeftB(nodeL, array_RootB(T), T);
  131. cout << "Unesite desno dijete korijena: ";
  132. cin >> nodeR;
  133. array_CreateRightB(nodeR, array_RootB(T), T);
  134. cout << "Unesite lijevo dijete lijevom cvoru: ";
  135. cin >> childlL;
  136. array_CreateLeftB(childlL, nodeL, T);
  137. cout << "Unesite desno dijete lijevom cvoru: ";
  138. cin >> childlR;
  139. array_CreateRightB(childlR, nodeL, T);
  140.  
  141. cout << endl;
  142. cout << "\t\t" << array_RootB(T) << endl;
  143. cout << "\t /" << " \\" << endl;
  144. cout << "\t " << array_LeftChildB(root, T) << " " << array_RightChildB(root, T) << endl;
  145. cout << "\t /" << " \\" << endl;
  146. cout << "\t " << array_LeftChildB(nodeL, T) << " " << array_RightChildB(nodeL, T) << endl;
  147.  
  148. do{
  149. cout << "\nOdabir operacija nad stablom" << endl;
  150. cout << "===========" << endl
  151. << "Sto zelite uraditi sa stablom? " << endl
  152. << "1. Ispisati oznaku odredenog cvora." << endl
  153. << "2. Promijeniti oznaku odredenog cvora." << endl
  154. << "3. Ispisati poziciju cvora." << endl
  155. << "4. Obrisati cvor." << endl
  156. << "0. Izlazak u glavni izbornik." << endl
  157. << "===========" << endl
  158. << "Koji je Vas odabir: ";
  159. cin >> odop;
  160.  
  161. int node=0;
  162. if(odop != 0){
  163. cout << "\nUnesite cvor: ";
  164. cin >> node;
  165. }
  166. if(odop == 1){
  167. cout << "Oznaka cvora je: " << array_LabelB(node, T);
  168. cout << endl;
  169. }
  170. if(odop == 2){
  171. int newMark;
  172. cout << "Unesite novu oznaku cvora: ";
  173. cin >> newMark;
  174. array_ChangeLabelB(newMark, node, T);
  175. cout << "Nova oznaka cvora [" << node << "] je: " << array_LabelB(node, T);
  176. cout << endl;
  177. }
  178. if(odop == 3){
  179. int chN;
  180. cout << "Zelite li (1 - Ispisati roditelja cvora, 2 - Ispisati lijevo dijete cvora, 3 - Ispisati desno dijete cvora): ";
  181. cin >> chN;
  182.  
  183. switch(chN){
  184. case 1: cout << array_ParentB(node, T); break;
  185. case 2: cout << array_LeftChildB(node, T); break;
  186. case 3: cout << array_RightChildB(node, T); break;
  187. default: cout << "Unesena opcija ne postoji, pokusajte ponovno!" << endl;
  188. }
  189. cout << endl;
  190. }
  191. if(odop == 4){
  192. char dn;
  193. cout << "Jeste li sigurni da zelite obrisati cvor: " << node << "? (d/n): ";
  194. cin >> dn;
  195. if(tolower(dn) == 'd') {
  196. array_DeleteB(node, T);
  197. cout << "Cvor: " << node << " je uspjesno obrisan." << endl;
  198. }
  199. else cout << "Cvor nije izbrisan." << endl;
  200. }
  201. }while(odop);
  202. }
  203.  
  204. if(choice == 2){
  205. cout << "\nKreiranje binarnog stabla poljem." << endl;
  206. cout << "----------------" << endl;
  207.  
  208. cout << "Unesite korijen stabla: ";
  209. cin >> root;
  210. pok_element* T = InitB(root, T);
  211.  
  212. cout << "Unesite lijevo dijete korijena: ";
  213. cin >> nodeL;
  214. CreateLeftB(nodeL, RootB(T));
  215. cout << "Unesite desno dijete korijena: ";
  216. cin >> nodeR;
  217. CreateRightB(nodeR, RootB(T));
  218. cout << "Unesite lijevo dijete lijevom cvoru: ";
  219. cin >> childlL;
  220. CreateLeftB(childlL, LeftChildB(T));
  221. cout << "Unesite desno dijete lijevom cvoru: ";
  222. cin >> childlR;
  223. CreateRightB(childlR, LeftChildB(T));
  224.  
  225. cout << endl;
  226. cout << "\t\t" << LabelB(RootB(T)) << endl;
  227. cout << "\t /" << " \\" << endl;
  228. cout << "\t " << LabelB(LeftChildB(T)) << " " << LabelB(RightChildB(T)) << endl;
  229. cout << "\t /" << " \\" << endl;
  230. cout << "\t " << LabelB(LeftChildB(LeftChildB(RootB(T)))) << " " << LabelB(RightChildB(LeftChildB(RootB(T))))
  231. << endl;
  232.  
  233. do{
  234. if(T == NULL){
  235. cout << "Stablo je izbrisano! Potrebno ga je ponovno kreirati." << endl;
  236. break;
  237. }
  238. cout << "\nOdabir operacija nad stablom" << endl;
  239. cout << "===========" << endl
  240. << "Sto zelite uraditi sa stablom? " << endl
  241. << "1. Ispisati oznaku odredenog cvora." << endl
  242. << "2. Promijeniti oznaku odredenog cvora." << endl
  243. << "3. Ispisati poziciju cvora." << endl
  244. << "4. Obrisati cvor." << endl
  245. << "0. Izlazak u glavni izbornik." << endl
  246. << "===========" << endl
  247. << "Koji je Vas odabir: ";
  248. cin >> odop;
  249.  
  250. int node=0;
  251. if(odop != 0){
  252. cout << "\nUnesite cvor: ";
  253. cin >> node;
  254. }
  255. if(odop == 1){
  256. cout << "Oznaka cvora je: " << LabelB(T);
  257. cout << endl;
  258. }
  259. if(odop == 2){
  260. int newMark;
  261. cout << "Unesite novu oznaku cvora: ";
  262. cin >> newMark;
  263. ChangeLabelB(newMark, T);
  264. cout << "Nova oznaka cvora [" << node << "] je: " << LabelB(T);
  265. cout << endl;
  266. }
  267. if(odop == 3){
  268. int chN;
  269. cout << "Zelite li (1 - Ispisati roditelja cvora, 2 - Ispisati lijevo dijete cvora, 3 - Ispisati desno dijete cvora): ";
  270. cin >> chN;
  271.  
  272. if(node == LabelB(RightChildB(T))){
  273. switch(chN){
  274. case 1: cout << LabelB(ParentB(node, T)); break;
  275. case 2: cout << "Cvor nema lijevo dijete."; break;
  276. case 3: cout << "Cvor nema desno dijete."; break;
  277. default: cout << "Unesena opcija ne postoji, pokusajte ponovno!" << endl;
  278. }
  279. cout << endl;
  280. continue;
  281. }
  282. if(node == LabelB(LeftChildB(T))){
  283. switch(chN){
  284. case 1: cout << LabelB(ParentB(node, T)); break;
  285. case 2: cout << LabelB(LeftChildB(LeftChildB(T))); break;
  286. case 3: cout << LabelB(RightChildB(LeftChildB(T))); break;
  287. default: cout << "Unesena opcija ne postoji, pokusajte ponovno!" << endl;
  288. }
  289. cout << endl;
  290. continue;
  291. }
  292. if(node == LabelB(LeftChildB(LeftChildB(RootB(T)))) || node == LabelB(RightChildB(LeftChildB(RootB(T))))){
  293. switch(chN){
  294. case 1: cout << LabelB(LeftChildB(T)); break;
  295. case 2: cout << "Cvor nema lijevo dijete."; break;
  296. case 3: cout << "Cvor nema desno dijete."; break;
  297. default: cout << "Unesena opcija ne postoji, pokusajte ponovno!" << endl;
  298. }
  299. cout << endl;
  300. continue;
  301. }
  302. switch(chN){
  303. case 1: cout << LabelB(ParentB(node, T)); break;
  304. case 2: cout << LabelB(LeftChildB(T)); break;
  305. case 3: cout << LabelB(RightChildB(T)); break;
  306. default: cout << "Unesena opcija ne postoji, pokusajte ponovno!" << endl;
  307. }
  308. cout << endl;
  309. }
  310. if(odop == 4){
  311. char dn;
  312. cout << "Jeste li sigurni da zelite izbrisati stablo? (d/n): ";
  313. cin >> dn;
  314. if(tolower(dn) == 'd') {
  315. DeleteB(RootB(T), RootB(T));
  316. T = NULL;
  317. }
  318. else cout << "Stablo nije izbrisano." << endl;
  319. }
  320. }while(odop);
  321. }
  322. cout << "\nZa povratak u Glavni izbornik pritisnite: Enter";
  323. }
  324.  
  325. int main(){
  326. int izbor;
  327. do{
  328. system("cls");
  329. cout << "I z b o r n i k" << endl;
  330. cout << "---------------" << endl;
  331. cout << "Odaberite vrstu implementacije stabla:" << endl << endl;
  332. cout << "1. Opcenito stablo" << endl;
  333. cout << "2. Binarno stablo" << endl;
  334. cout << "0. Izlazak iz programa" << endl;
  335. cout << "---------------" << endl;
  336. do{
  337. cout << "Koji je Vas odabir: ";
  338. cin >> izbor;
  339. if(izbor < 0 || izbor > 3) cout << "Unesena opcija nije podrzana! Unesite jedno od pondenih opcija." << endl;
  340. }while(izbor < 0 || izbor > 3);
  341. cout << endl;
  342.  
  343. switch(izbor){
  344. case 1:
  345. system("cls");
  346. cout << "Pokretanje implementacije za: Opcenito stablo ..." << endl;
  347. Sleep(500);
  348. opcenito_stablo();
  349. cin.ignore();
  350. (void)cin.get();
  351. break;
  352. case 2:
  353. system("cls");
  354. cout << "Pokretanje implementacije za: Binarno stablo ..." << endl;
  355. Sleep(500);
  356. binarno_stablo();
  357. cin.ignore();
  358. (void)cin.get();
  359. break;
  360. case 3: break;
  361. case 0:
  362. cout << "Izlazim iz programa ..." << endl;
  363. Sleep(500);
  364. }
  365. }
  366. while(izbor);
  367. return 0;
  368. }

Report this snippet  

You need to login to post a comment.