Kayıt
22 Nisan 2007
Mesajlar
1.361
Beğeniler
0
Ş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;
}
 
Yukarı Alt