stablo





0
Date Submitted Sun. Jan. 8th, 2012 12:14 PM
Revision 1 of 1
Helper mikoscak
Tags funkcija. | izvrsavanje
Comments 0 comments
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);
}

 

Mislav Koscak

Comments

There are currently no comments for this snippet.

Voting

Votes Up


Votes Down