|
|
|
stablo
0
izvršavanje funkcija
#include <iostream>
#include "ostablo_polje.h"
#include "ophodnja.h"
#include "bstablo_polje.h"
#include "bstablo_pokazivac.h"
using namespace std;
int main () {
int izbor,izb,oznaka,cvor;
bool init=false,initB=false,initb=false;
do{
cout<<"Izbornik"<<endl;
cout<<"1.Implementacija opcenitog stabla"<<endl;
cout<<"2.Implementacija algoritama ophodenja stabla"<<endl;
cout<<"3.Implementacija binarnog stabla pomocu polja"<<endl;
cout<<"4.Implementacija binarnog stabla pomocu pokazivaca"<<endl;
cout<<"9.Izlaz iz programa"<<endl;
cout<<"Vas izbor"<<endl;
cin>>izbor;
switch(izbor){
case 1:
cout<<"1.Inicijalizacija polja\n";
cout<<"2.Ispis korijena stabla\n";
cout<<"3.Dodavanje novog cvora\n";
cout<<"4.Brisanje cvora\n";
cout<<"5.Ispis oznake cvora\n";
cout<<"6.Promjena oznake cvora\n";
cout<<"7.Ispis roditelja cvora\n";
cout<<"8.Prvo dijete cvora\n";
cout<<"9.Sljedeci brat cvora\n";
cout<<"Vas izbor";
cin>>izb;
if(izb<1||izb>9)
cout<<"Pogresan unos!\n";
if(izb!=1&&!init){
cout<<"Stablo nije inicijalizirano!\n";
break;
}
switch(izb){
case 1:
cout<<"Unesite oznaku korijena stabla:";
cin>>oznaka;
InitT(oznaka,tree);
init=true;
break;
case 2:
cout<<"Korijen stabla je cvor:"<<RootT(tree)<<endl;
cout<<"Oznaka korjena stabla je:"<<LabelT(1,tree)<<endl;
break;
case 3:
cout<<"Unesite cvor kojem stvarate dijete:";
cin>>cvor;
if(LabelT(cvor,tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cout<<"Unesite oznaku za cvor koji stvarate:";
cin>>oznaka;
cout<<"Cvor je stvoren na poziciji:"<<CreateT(oznaka,cvor,tree)<<endl;
break;
case 4:
cout<<"Unesite cvor kojeg zelite obrisati sa njegovim potomcima:";
cin>>cvor;
if(LabelT(cvor,tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
DeleteT(cvor,tree);
if(cvor==1){
init=false;
cout<<"Korijen je uspjesno obrisan!\n";
}
else
cout<<"Cvor je uspjesno obrisan!\n";
break;
case 5:
cout<<"Unesite cvor za koji zelite vidjeti oznaku:";
cin>>cvor;
if(LabelT(cvor,tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cout<<"Oznaka tog cvora je:"<<LabelT(cvor,tree)<<endl;
break;
case 6:
cout<<"Unesite cvor kojem zelite promijeniti oznaku:";
cin>>cvor;
if(LabelT(cvor, tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cout<<"Oznaka cvora je:"<<LabelT(cvor,tree)<<endl;
cout<<"Unesite novu oznaku:";
cin>>oznaka;
ChangeLabelT(oznaka,cvor,tree);
break;
case 7:
cout<<"Unesite cvor za koji zelite naci roditelja:";
cin>>cvor;
if(LabelT(cvor,tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cvor=ParentT(cvor,tree);
if(cvor==-1)
cout<<"Taj cvor nema roditelja, sto znaci da je korijen stabla.\n";
else
cout<<"Roditelj tog cvora je cvor:"<<cvor<<endl;
break;
case 8:
cout<<"Unesite cvor za koji zelite naci prvo dijete:";
cin>>cvor;
if(LabelT(cvor, tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cvor=FirstChildT(cvor,tree);
if(cvor==-1)
cout<<"Taj cvor nema potomaka.\n";
else
cout<<"Prvo dijete tog cvora je cvor:"<<cvor<<endl;
break;
case 9:
cout<<"Unesite cvor za koji zelite naci sljedeceg brata:";
cin>>cvor;
if(LabelT(cvor,tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cvor=NextSiblingT(cvor,tree);
if(cvor==-1)
cout<<"Taj cvor nema brace s desna.\n";
else
cout<<"Sljedeci brat tog cvora je cvor:"<<cvor<<endl;
break;
}
break;
case 2:
if(!init) {
cout<<"Stablo nije inicijalizirano!\n";
break;
}
cout<<"Izaberite algoritam ophodenje stabla: PreOrder, InOrder, PostOrder (1/2/3):";
cin>>izb;
cout<<endl;
if(izb<1||izb>3)
cout<<"Pogresan unos!";
switch(izb){
case 1:
PreOrder(RootT(tree));
break;
case 2:
InOrder(RootT(tree));
break;
case 3:
PostOrder(RootT(tree));
}
cout << endl;
break;
case 3:
cout << "1. Inicijalizacija binarnog stabla\n";
cout << "2. Ispis korijena binarnog stabla\n";
cout << "3. Stvaranje lijevog djeteta cvora\n";
cout << "4. Stvaranje desnog djeteta cvora\n";
cout << "5. Brisanje cvora\n";
cout << "6. Ispis oznake cvora\n";
cout << "7. Promjena oznake cvora\n";
cout << "8. Ispis roditelja cvora\n";
cout << "9. Lijevo dijete cvora\n";
cout << "10. Desno dijete cvora\n";
cout << "Vas izbor:";
cin >> izb;
if(izb<1||izb>10)
cout<<"Pogresan unos!\n";
if(izb!=1&&!initB){
cout<<"Binarno stablo nije inicijalizirano!\n";
break;
}
switch (izb){
case 1:
cout<<"Unesite oznaku korijena binarnog stabla:";
cin>>oznaka;
InitB(oznaka,binary_tree);
initB=true;
break;
case 2:
cout<<"Korijen binarnog stabla je cvor:"<<RootB(binary_tree)<<endl;
cout<<"Oznaka korjena je:"<<LabelB(1, binary_tree)<<endl;
break;
case 3:
cout<<"Unesite cvor kojem stvarate lijevo dijete:";
cin>>cvor;
if(LabelB(cvor,binary_tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cout<<"Unesite oznaku za cvor koji stvarate:";
cin>>oznaka;
if(CreateLeftB(oznaka, cvor, binary_tree))
cout<<"Cvor je stvoren na poziciji:"<<cvor*2<<endl;
else
cout<<"Cvor vec ima lijevo dijete!\n";
break;
case 4:
cout<<"Unesite cvor kojem stvarate desno dijete:";
cin>>cvor;
if(LabelB(cvor, binary_tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cout<<"Unesite oznaku za cvor koji stvarate:";
cin>>oznaka;
if(CreateRightB(oznaka,cvor,binary_tree))
cout<<"Cvor je stvoren na poziciji:"<<cvor*2<<endl;
else
cout<<"Cvor vec ima desno dijete!\n";
break;
case 5:
cout<<"Unesite cvor kojeg zelite obrisati sa njegovim potomcima:";
cin>>cvor;
if(LabelB(cvor,binary_tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
DeleteB(cvor, binary_tree);
if(cvor==1){
initB=false;
cout<<"Korijen je uspjesno obrisan!\n";
}
else
cout<<"Cvor je uspjesno obrisan!\n";
break;
case 6:
cout<<"Unesite cvor za koji zelite vidjeti oznaku:";
cin>>cvor;
if(LabelB(cvor,binary_tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cout<<"Oznaka tog cvora je:"<<LabelB(cvor,binary_tree)<<endl;
break;
case 7:
cout<<"Unesite cvor kojem zelite promijeniti oznaku:";
cin>>cvor;
if(LabelB(cvor, binary_tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cout<<"Oznaka cvora je:"<<LabelB(cvor,binary_tree)<<endl;
cout<<"Unesite novu oznaku:";
cin>>oznaka;
ChangeLabelB(oznaka,cvor,binary_tree);
break;
case 8:
cout<<"Unesite cvor za koji zelite naci roditelja:";
cin>>cvor;
if(LabelB(cvor,binary_tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cvor=ParentB(cvor,binary_tree);
if(cvor==-1)
cout<<"Taj cvor nema roditelja, sto znaci da je korijen binarnog stabla\n";
else
cout<<"Roditelj tog cvora je cvor:"<<cvor<<endl;
break;
case 9:
cout<<"Unesite cvor za koji zelite naci lijevo dijete:";
cin>>cvor;
if(LabelB(cvor, binary_tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cvor=LeftChildB(cvor,binary_tree);
if(cvor==-1)
cout<<"Taj cvor nema lijevo dijete\n";
else
cout<<"Lijevo dijete tog cvora je cvor:"<<cvor<<endl;
break;
case 10:
cout<<"Unesite cvor za koji zelite naci desno dijete:";
cin>>cvor;
if(LabelB(cvor,binary_tree)==-1){
cout<<"Taj cvor ne postoji!\n";
break;
}
cvor=RightChildB(cvor,binary_tree);
if(cvor==-1)
cout<<"Taj cvor nema desno dijete\n";
else
cout<<"Desno dijete tog cvora je cvor:"<<cvor<<endl;
break;
}
break;
case 4:
cout<<"1.Inicijalizacija binarnog stabla\n";
cout<<"2.Ispis korijena binarnog stabla\n";
cout<<"3.Stvaranje lijevog djeteta cvora\n";
cout<<"4.Stvaranje desnog djeteta cvora\n";
cout<<"5.Brisanje cvora\n";
cout<<"6.Promjena oznake cvora\n";
cout<<"7.Ispis roditelja cvora\n";
cout<<"8.Lijevo dijete cvora\n";
cout<<"9.Desno dijete cvora\n";
cout<<"Unesite izbor: ";
cin>>izb;
if (izb<1||izb>9)
cout<<"Pogresan unos!\n";
if(izb!=1&&!initb){
cout<<"Binarno stablo nije inicijalizirano!\n";
break;
}
switch(izb){
case 1:
cout<<"Unesite oznaku korijena binarnog stabla:";
cin>>oznaka;
Initb(oznaka,bin_tree);
initb=true;
break;
case 2:
cout<<"Korijen binarnog stabla je cvor s oznakom:"<<Labelb(Rootb(bin_tree))<<endl;
break;
case 3:
cout<<"Unesite oznaku cvora kojem stvarate lijevo dijete:";
cin>>cvor;
if(AntiLabelb(bin_tree,cvor)==NULL){
cout<<"Taj cvor ne postoji!\n";
break;
}
cout<<"Unesite oznaku za cvor koji stvarate:";
cin>>oznaka;
if(!CreateLeftb(oznaka,AntiLabelb(bin_tree,cvor))){
cout<<"Cvor s tom oznakom vec ima lijevo dijete!\n";
}
break;
case 4:
cout<<"Unesite oznaku cvora kojem stvarate desno dijete:";
cin>>cvor;
if(AntiLabelb(bin_tree,cvor)==NULL){
cout<<"Taj cvor ne postoji!\n";
break;
}
cout<<"Unesite oznaku za cvor koji stvarate:";
cin>>oznaka;
if(!CreateRightb(oznaka,AntiLabelb(bin_tree,cvor))){
cout<<"Cvor s tom oznakom vec ima lijevo dijete!\n";
}
break;
case 5:
cout<<"Unesite oznaku cvora kojeg zelite obrisati sa njegovim potomcima:";
cin>>cvor;
if(AntiLabelb(bin_tree, cvor)==NULL){
cout<<"Taj cvor ne postoji!\n";
break;
}
if(AntiLabelb(bin_tree,cvor)==Rootb(bin_tree)){
initb=false;
cout<<"Korijen je uspjesno obrisan!\n";
}
else
cout<<"Cvor je uspjesno obrisan!\n";
Deleteb(AntiLabelb(bin_tree,cvor),bin_tree);
break;
case 6:
cout<<"Unesite oznaku cvora kojem zelite promijeniti oznaku:";
cin>>cvor;
if(AntiLabelb(bin_tree,cvor)==NULL){
cout<<"Taj cvor ne postoji!\n";
break;
}
cout<<"Unesite novu oznaku:";
cin>>oznaka;
ChangeLabelb(oznaka,AntiLabelb(bin_tree,cvor));
break;
case 7:
cout<<"Unesite oznaku cvora kojem zelite naci roditelja:";
cin>>cvor;
if(AntiLabelb(bin_tree,cvor)==NULL){
cout<<"Taj cvor ne postoji!\n";
break;
}
if(Parentb(AntiLabelb(bin_tree,cvor),bin_tree)==NULL)
cout<<"Taj cvor nema roditelja, sto znaci da je korijen binarnog stabla.\n";
else
cout<<"Roditelj tog cvora je cvor s oznakom:"<<Labelb(Parentb(AntiLabelb(bin_tree,cvor),bin_tree))<<endl;
break;
case 8:
cout<<"Unesite oznaku cvora kojem zelite naci lijevo dijete:";
cin>>cvor;
if(AntiLabelb(bin_tree, cvor)==NULL){
cout<<"Taj cvor ne postoji!\n";
break;
}
if(LeftChildb(AntiLabelb(bin_tree,cvor))==NULL)
cout<<"Cvor s tom oznakom nema lijevo dijete.\n";
else
cout<<"Lijevo dijete tog cvora je cvor s oznakom:"<<Labelb(LeftChildb(AntiLabelb(bin_tree,cvor)))<<endl;
break;
case 9:
cout<<"\nUnesite oznaku cvora kojem zelite naci desno dijete:";
cin>>cvor;
if(AntiLabelb(bin_tree, cvor)==NULL){
cout<<"Taj cvor ne postoji!\n";
break;
}
if(RightChildb(AntiLabelb(bin_tree, cvor))==NULL)
cout<<"Cvor s tom oznakom nema desno dijete.\n";
else
cout<<"Desno dijete tog cvora je cvor s oznakom:"<<Labelb(RightChildb(AntiLabelb(bin_tree,cvor)))<<endl;
break;
}
break;
case 9:
system("pause");
return 0;
}
cout<<endl;
}while(1);
}




There are currently no comments for this snippet.