#include #include #include typedef struct dugum{ int veri; dugum * sol ; dugum * sag; }; dugum * ekle(dugum *agac , int eklenecek){ if(agac==NULL){ dugum * gecici = (dugum *) malloc(sizeof(dugum)); gecici->veri=eklenecek; gecici->sol = NULL; gecici->sag = NULL; return gecici; } else if (eklenecek < agac->veri){ agac->sol = ekle(agac->sol,eklenecek); } else if ( eklenecek > agac->veri){ agac->sag = ekle(agac->sag,eklenecek); } else{ // eşitse işlem yapma } return agac; } void bastir(dugum * agac){ // NLR printf("%d->",agac->veri); if(agac->sol!=NULL){ bastir(agac->sol); } if (agac->sag!=NULL){ bastir(agac->sag); } } dugum * enkucuksag(dugum * agac){ if(agac == NULL) return NULL; /* printf("enkucuksag : %d",agac->veri); fflush(stdout);*/ dugum * gecici = agac; if(gecici->sag !=NULL) gecici = gecici -> sag ; else{ // perror("gecti"); return NULL; } if(gecici->sol == NULL) return gecici; while (gecici->sol!=NULL){ gecici= gecici ->sol; } // perror("dondu"); return gecici; } dugum * sil (dugum * agac, int silsayi){ if(agac==NULL) return NULL; /* printf("agac: %d",agac->veri); fflush(stdout);*/ if(silsayi > agac->veri){ /* printf("sag: %d",agac->veri); fflush(stdout);*/ agac->sag = sil(agac->sag,silsayi); } else if(silsayi < agac->veri){ /* printf("sol: %d",agac->veri); fflush(stdout);*/ agac->sol = sil(agac->sol,silsayi); } else{ /* printf("esit: %d",agac->veri); fflush(stdout);*/ dugum * gecici = enkucuksag(agac); if(gecici!=NULL) agac = sil(agac,gecici->veri); else{ return NULL; } gecici->sol = agac->sol; gecici->sag = agac->sag; agac = gecici; } return agac; } dugum * map(dugum *agac, int((*fp) (int))){ if(agac==NULL) return NULL; agac->veri=fp(agac->veri); if(agac->sag!=NULL){ agac->sag = map(agac->sag,fp); } if(agac->sol!=NULL){ agac->sol = map (agac->sol,fp); } return agac; } int f(int a){ return 2 * a ; } int g (int a ){ return a +8; } int q (int a){ return a * -1; } int main(){ dugum * agac = (dugum *) malloc(sizeof(dugum)); agac->veri= 10; agac->sol = (dugum *) malloc(sizeof(dugum)); agac->sol->veri=5; dugum * agac2 =NULL; agac2 = ekle (agac2,9); agac2 = ekle (agac2,25); agac2 = ekle (agac2,4); agac2 = ekle (agac2,42); agac2 = ekle (agac2,5); agac2 = ekle (agac2,14); agac2 = ekle (agac2,19); /* dugum * gecici = enkucuksag(agac2); printf("%d ",gecici->veri);*/ bastir(agac2); printf ("\n"); agac2 = sil(agac2,9); bastir(agac2); agac2 = map(agac2, f); printf ("\n"); bastir(agac2); printf ("\n"); agac2=map(agac2,g); bastir(agac2); printf ("\n"); agac2=map(agac2,q); bastir(agac2); getch(); }