İkili Arama Ağacı C'de Toplam derinlik Kodu



#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SENTINEL -100000000

struct dugum {
    int icerik;
    struct dugum *sol;
    struct dugum *sag;
};

struct ikili_arama_agaci{
    struct dugum *kok;
};

void ikili_arama_agaci_olustur(struct ikili_arama_agaci **agac){
    *agac=(struct ikili_arama_agaci*)malloc(sizeof(struct ikili_arama_agaci));
    if(*agac==NULL){
        printf("Heapte gerekli yer ayrilamadi... exit ...\n");
        exit(1);
    }
    (*agac)->kok=NULL;
}

struct dugum* dugum_olustur(int icerik){
    struct dugum *d = (struct dugum*)malloc(sizeof(struct dugum));
    if(d==NULL){
        printf("Heapte gerekli yer ayrilamadi... exit ...\n");
        exit(1);
    }
    d->icerik = icerik; (*d).icerik=icerik;
    d->sol=d->sag=NULL;
    return d;
}


void ekle(struct ikili_arama_agaci *agac,int icerik){
    struct dugum *dugum;
    struct dugum *d;
    struct dugum *geri;

    d=agac->kok;
    while(d!=NULL){
        geri=d;
        if(icerik < d->icerik) d=d->sol;
        else if(icerik > d->icerik) d= d->sag;
        else return;
    }
    dugum=dugum_olustur(icerik);
    if(agac->kok==NULL){
        agac->kok = dugum;
        return;
    }
    if(icerik < geri->icerik) geri->sol = dugum;
    else geri->sag = dugum;

}

void preorder(struct dugum *kok){

    if(kok==NULL) return;
    printf("%4d ",kok->icerik);
    preorder(kok->sol);
    preorder(kok->sag);

}

///****** ALGORITMA ANALIZI

int toplam_derinlik(struct dugum *kok,struct dugum *t,struct dugum *d){
    int static i=0;

    if(d==NULL)return i;

    i=i+uzunluk(kok,t,d);
    t=kok;
    toplam_derinlik(kok,t,d->sol);

    toplam_derinlik(kok,t,d->sag);
}

int uzunluk(struct dugum *kok,struct dugum *t, struct dugum *d){
    int i=0;
    if(kok->icerik==d->icerik) return 0;
    while(t->icerik!=d->icerik){
      if(t->icerik>d->icerik){///solda ise
        i=i+1;
        t=t->sol;
      }
      else{///saðda ise
        i=i+1;
        t=t->sag;
      }
    }
    return i;
}
int rastgele_eleman(int kac_arasinda){
    int sayi;

    sayi=rand()%kac_arasinda;
    return sayi;
}


int main(int argc, char** argv) {
   // int i;
    struct ikili_arama_agaci *agac;
    int sayi,i,a, kac_dugumlu;
    ikili_arama_agaci_olustur(&agac);

    printf("lütfen istediğiniz düğüm sayıyı giriniz: ");
    scanf("%d",&kac_dugumlu);

    srand(time(NULL));

    for(i=0;i<kac_dugumlu;i++){
        sayi=rastgele_eleman(100);
        ekle(agac,sayi);
    }

    preorder(agac->kok);

    a=toplam_derinlik(agac->kok,agac->kok,agac->kok);
    printf("\n\n%d",a);

    return 0;
}

Yorumlar

Bu blogdaki popüler yayınlar

Python'da Liste İçin Varyans, Standart Sapma, Ortalama, Minimum bulma, Maksimum bulma

Veritabanı Yönetim Sistemleri

Python'da Görüntü İşleme - Resmi Siyah Beyaz Yapma