İ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
Yorum Gönder