1. Reklam


    1. joysro
      ledas
      jungler
      keasro
      zeus
      karantina

AGAC (Tree)(Veri Yapilari)


  1. Narqotic

    Narqotic Bilgiliyim rank8

    Kayıt:
    22 Nisan 2007
    Mesajlar:
    1.365
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Meslek:
    !!!
    Şehir:
    BeN SeNiN CaNıN İçİN ÖmRüMü BiR KiBRiTiN KaBıNDa T
    Buyrun Kodu

    Kod:
    #include <iostream>
    
    using namespace std;
    
    ////////////////////////////////////////////////
    
    class Dugum{
        char merkez;
        Dugum *sag, *sol;
        public:
            Dugum();
            Dugum(char);
            char Merkez();
            Dugum *SolCocuk();
            Dugum *SagCocuk();
            void Merkez(char);
            void SolAyarla(Dugum *);
            void SagAyarla(Dugum *);
    };
    
    Dugum::Dugum(){ // dugum olustur (constructor)
        merkez = 0;
        sol = NULL;
        sag = NULL;
    }
    
    Dugum::Dugum(char c){ // dugum olustur (constructor)
        merkez = c;
        sol = NULL;
        sag = NULL;
    }
    
    char Dugum::Merkez(){ // dugumdeki degeri oku
        return merkez;
    }
    
    Dugum* Dugum::SolCocuk(){ // sol cocugun adresini dondur
        return sol;
    }
    
    Dugum* Dugum::SagCocuk(){ // sag cocugun adresini dondur
        return sag;
    }
    
    void Dugum::Merkez(char c){ // dugumdeki degeri ayarla
        merkez = c;
    }
    
    void Dugum::SolAyarla(Dugum *gir){ // sol cocugu ayarla
        sol = gir;
    }
    
    void Dugum::SagAyarla(Dugum *gir){ // sag cocugu ayarla
        sag = gir;
    }
    
    ////////////////////////////////////////////////
    
    class Agac{
        Dugum *bas;
        void SolGoster(Dugum *);
        void OrtaGoster(Dugum *);
        public:
            Agac();
            void Ayarla(Dugum *);
            Dugum *Bas();
            void SoldanTara();
            void OrtadanTara();
    };
    
    Agac::Agac(){ // baslangic durumu
        bas = NULL;
    }
    
    void Agac::SolGoster(Dugum *gir){ // INORDER (sol, orta, sag)
        if(gir == NULL)
            return;
        SolGoster(gir->SolCocuk());
        cout << gir->Merkez() << " ";
        SolGoster(gir->SagCocuk());
    }
    
    void Agac::OrtaGoster(Dugum *gir){ // PREORDER (orta, sol, sag)
        if(gir == NULL)
            return;
        cout << gir->Merkez() << " ";
        OrtaGoster(gir->SolCocuk());
        OrtaGoster(gir->SagCocuk());
    }
    
    void Agac::Ayarla(Dugum *gir){ // ilk dugum ayarlanir
        bas = gir;
    }
    
    Dugum* Agac::Bas(){ // bas dugumu dondurur
        return bas;
    }
    
    void Agac::SoldanTara(){ // INORDER (sol, orta, sag)
        SolGoster(bas);
    }
    
    void Agac::OrtadanTara(){ // PREORDER (orta, sol, sag)
        OrtaGoster(bas);
    }
    
    ////////////////////////////////////////////////
    
    int main(void){
        
        Agac agac;
        Dugum *yedek, *yeni;
        
        //        Agac -----> 0
        
        yedek = new Dugum();
        yedek->Merkez('A');
        agac.Ayarla(yedek);
        
        //        Agac -----> A   <-- yedek
        
        yeni = new Dugum('B');
        yedek->SolAyarla(yeni);
        
        //        Agac -----> A
        //                   / \
        //                 B
        
        yeni = new Dugum('C');
        yedek->SagAyarla(yeni);
        
        //        Agac -----> A
        //                   / \
        //                 B    C
        
        yedek = yedek->SolCocuk();
        
        //        Agac -----> A
        //                   / \
        //      yedek -->  B    C
        
        yeni = new Dugum('D');
        yedek->SolAyarla(yeni);
        
        //        Agac -----> A
        //                   / \
        //                 B    C
        //                / \     
        //              D
        
        yeni = new Dugum('E');
        yedek->SagAyarla(yeni);
        
        //        Agac -----> A
        //                   / \
        //                 B    C
        //                / \     
        //              D    E
        
        yedek = agac.Bas()->SagCocuk();
        
        //        Agac -----> A
        //                   / \
        //                 B    C  <-- yedek
        //                / \     
        //              D    E
        
        yeni = new Dugum('F');
        yedek->SolAyarla(yeni);
        
        //        Agac -----> A
        //                   /  \
        //                 B     C 
        //                / \   / \  
        //              D    E F
        
        yeni = new Dugum('G');
        yedek->SagAyarla(yeni);
        
        //        Agac ----->  A
        //                   /  \
        //                 B     C 
        //                / \   / \  
        //              D    E F   G
        
        cout << "Soldan  (inorder)  : ";
        agac.SoldanTara();
        cout << endl << "-----------------------------------" << endl;
        cout << "Ortadan (preorder) : ";
        agac.OrtadanTara();
        
        cout << endl << endl;
        system("PAUSE");
        return 1;
    }