/ Published in: C++
main program 4. vjezbe iz SP
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include<iostream> #include "opcenito_stablo.h" #include "bin_array.h" //#include "bin_pointer.h" #include "ophodenje_stabla.h" using namespace std; tree *stablo1; btree *stablo2; bool alocirano1=false; bool alocirano2=false; void PICEK(){ int izbor, cvor; char K; if(!alocirano1){ cout << endl << "Inicijalizacija.." << endl; cout << "Oznaka korijena stabla: "; cin>>K; stablo1=InitT(K,stablo1); alocirano1=true; } do{ cout << endl << "Korijen: " << RootT(stablo1) << endl; cout << "1. Novi cvor" << endl; cout << "2. Roditelj cvora" << endl; cout << "3. Prvo dijete cvora" << endl; cout << "4. Sljedeci brat cvora" << endl; cout << "5. Oznaka cvora" << endl; cout << "6. Promjena oznake cvora" << endl; cout << "7. Obrisi cvor" << endl; cout << "8. Ispisi svu djecu cvora" << endl; cout << "9. Izlaz" << endl; cout << "Odaberi: "; cin >> izbor, cout << endl; switch(izbor){ case 2: cout << "Unesi cvor: "; cin >> cvor; if(LabelT(cvor, stablo1)==' '){ cout << "Taj cvor ne postoji!" << endl; break; } cvor=ParentT(cvor, stablo1); cout << "Roditelj cvora je " << cvor << endl; break; case 3: cout << "Unesi cvor: "; cin >> cvor; if(LabelT(cvor, stablo1)==' '){ cout << "Taj cvor ne postoji!" << endl; break; } cvor=FirstChildT(cvor, stablo1); if(cvor!=-1) cout << "Prvo dijete cvora je " << cvor << endl; else cout <<"Cvor ne postoji.." << endl; break; case 4: cout << "Unesi cvor: "; cin >> cvor; if(LabelT(cvor, stablo1)==' '){ cout << "Taj cvor ne postoji!" << endl; break; } cvor=NextSiblingT(cvor, stablo1); if(cvor!=-1) cout << "Sljedeci brat cvora je " << cvor << endl; else cout << "Cvor ne postoji.." << endl; break; case 5: cout << "Unesi cvor: "; cin >> cvor; if(LabelT(cvor, stablo1)==' '){ cout << "Taj cvor ne postoji!" << endl; break; } K=LabelT(cvor, stablo1); cout << "Oznaka cvora je " << K << endl; break; case 1: cout << "Unesi cvor(roditelj buduceg): "; cin >> cvor; if(LabelT(cvor, stablo1)==' '){ cout << "Taj cvor ne postoji!" << endl; break; } cout << "Unesi oznaku za cvor: "; cin >> K; cout << "Pozicija novog cvora je " << CreateT(K,cvor,stablo1) << endl; break; case 6: cout << "Unesi cvor: "; cin >> cvor; if(LabelT(cvor, stablo1)==' '){ cout << "Taj cvor ne postoji!" << endl; break; } cout << "Unesi novu oznaku cvora: "; cin >> K; ChangeLabelT(K, cvor, stablo1); break; case 7: cout << "Unesi cvor: "; cin >> cvor; if(LabelT(cvor, stablo1)==' '){ cout << "Taj cvor ne postoji!" << endl; break; } if(DeleteT(cvor, stablo1)) cout << "Cvor obrisan.." << endl; else cout << "Cvor nije obrisan..." << endl; break; case 8: cout << "Unesi cvor: "; cin >> cvor; if(LabelT(cvor, stablo1)==' '){ cout << "Taj cvor ne postoji!" << endl; break; } if(FirstChildT(cvor, stablo1)!=-1){ cvor=FirstChildT(cvor, stablo1); cout << "Prvo dijete: " << cvor << endl; while(NextSiblingT(cvor, stablo1)!=-1) cvor=NextSiblingT(cvor, stablo1), cout << "Sljedece dijete: " << cvor << endl; } else cout << "Cvor nema djece.." << endl; break; } }while(izbor!=9); } void MICEK(){ int izbor, cvorb; char K, O; element cv; if(!alocirano2){ cout << endl << "Inicijalizacija binarnog stabla.." << endl; cout << "Oznaka korijena stabla: "; cin >> K; stablo2=InitB(K,stablo2); alocirano2=true; } do{ cout <<endl; cout << "Oznaka korijena stabla: " << LabelB(RootB(stablo2),stablo2) << "(" << RootB(stablo2) << ")" << endl; cout << "1. Dodaj lijevo dijete" << endl; cout << "2. Dodaj desno dijete" << endl; cout << "3. Roditelj cvora" << endl; cout << "4. Lijevo dijete cvora" << endl; cout << "5. Desno dijete cvora" << endl; cout << "6. Promjena oznake cvora" << endl; cout << "7. Obrisi cvor" << endl; cout << "9. Izlaz" << endl; cout << "Odaberi: "; cin >> izbor, cout << endl; switch(izbor){ case 1: cout << "Dodajem lijevo..." << endl; cout << "Unesi oznaku cvora: "; cin >> O; if(!postoji(O, stablo2)) cout << "Ne postoji taj cvor.." << endl; if(!postoji(O, stablo2)) break; cout << "Unesi oznaku novog cvora: "; cin >> K; cv=postoji(O, stablo2); CreateLeftB(K, cv, stablo2); break; case 2: cout << "Dodajem desno..." << endl; cout << "Unesi oznaku cvora: "; cin >> O; if(!postoji(O, stablo2)) cout<<"Ne postoji taj cvor..\n"; if(!postoji(O, stablo2)) break; cout << "Unesi oznaku novog cvora: "; cin >> K; cv=postoji(O, stablo2); CreateRightB(K, cv, stablo2); break; case 3: cout << "Unesi oznaku cvora: "; cin >> O; if(!postoji(O, stablo2)) cout << "Ne postoji taj cvor.." << endl; if(!postoji(O, stablo2)) break; cv=postoji(O, stablo2); if(LabelB(cv, stablo2)==LabelB(RootB(stablo2), stablo2)){ cout << "Korijen stabla nema roditelje.." << endl; break; } if(ParentB(cv, stablo2)) cout << "Roditelj tog cvora je " << LabelB(ParentB(cv, stablo2),stablo2) << endl; break; case 4: cout << "Unesi oznaku cvora: "; cin >> O; if(!postoji(O, stablo2)) cout << "Ne postoji taj cvor.." << endl; if(!postoji(O, stablo2)) break; cv=postoji(O, stablo2); if(LeftChildB(cv, stablo2)){ cv=LeftChildB(cv, stablo2); cout << "Oznaka lijevog dijeteta tog cvora je " << LabelB(cv, stablo2) << endl; } else cout << "Nema dijete.." << endl; break; case 5: cout << "Unesi oznaku cvora: "; cin >> O; if(!postoji(O, stablo2)) cout << "Ne postoji taj cvor.." << endl; if(!postoji(O, stablo2)) break; cv=postoji(O, stablo2); if(RightChildB(cv, stablo2)){ cv=RightChildB(cv, stablo2); cout << "Oznaka desnog dijeteta tog cvora je " << LabelB(cv, stablo2) << endl; } else cout << "Nema dijete.." << endl; break; case 6: cout << "Unesi oznaku cvora: "; cin >> O; if(!postoji(O, stablo2)) cout << "Ne postoji taj cvor.." << endl; if(!postoji(O, stablo2)) break; cv=postoji(O, stablo2); cout << "Unesi novu oznaku cvora: "; cin >> O; ChangeLabelB(O, cv, stablo2); cout << "Uspjesno izmjenjeno.." << endl; break; case 7: cout << "Unesi oznaku cvora: "; cin >> O; char odaberi='n'; if(!postoji(O, stablo2)) cout << "Ne postoji taj cvor.." << endl; if(!postoji(O, stablo2)) break; if(LabelB(cv, stablo2)==LabelB(RootB(stablo2), stablo2)){ cout << "Brisati korijen(d/n): "; char odaberi; do cin >> odaberi; while(odaberi!='d'&&odaberi!='n'); if(odaberi=='d'){ cout << endl << "Brisem korijen i vracam se u glavni izbornik" << endl; alocirano2=false; } } DeleteB(cv, stablo2); cout << "Izbrisano.." << endl; if(odaberi=='d') return; break; } }while(izbor!=9); } void ZMAJ(){ if(!alocirano2) cout << endl << "Binarno stablo ne postoji..." << endl; if(!alocirano2) return; int izbor; do{ cout << endl << endl << "1. Preorder" << endl; cout << "2. Inorder" << endl; cout << "3. Postorder" << endl; cout << "9. Povratak u glavni izbornik" << endl; cout << "Odaberi: "; cin >> izbor; cout << endl << "Ispisujem oznake: "; switch(izbor){ case 1: preorder(RootB(stablo2),stablo2); cout << endl; break; case 2: inorder(RootB(stablo2),stablo2); cout << endl; break; case 3: postorder(RootB(stablo2),stablo2); cout << endl; break; } }while(izbor!=9); } int main(){ int izbor; do{ cout << endl << "--------------------------------------------" << endl; cout << "1. Implementacija prvo dijete-sljedeci brat" << endl; cout << "2. Binarno stablo" << endl; cout << "3. Ophodjenje stabla" << endl; cout << "--------------------------------------------" << endl; cout << "Odaberi: "; cin >> izbor; switch(izbor){ case 1: PICEK();break; case 2: MICEK();break; case 3: ZMAJ();break; } }while(izbor!=9); return 0; }