İkili Arama Ağacı (BST) Düğüm ekleme, silme, ağacı dolaşma
#include <stdio.h>
#include <stdlib.h>
/*Ağaca ait düğüm yapısını tanmlıyor */
struct agacdugum{
struct agacdugum*soldal;
int data;
struct agacdugum*sagdal;
};
//Düğüm yapısı için değişken tanmlamaların yapıldığı kısım
typedef struct agacdugum AGACDUGUM;
typedef struct agacdugum *AGACDUGUMPTR;
//Ağaca düğüm eklemyi sağlayan foksiyon
AGACDUGUMPTR dugumekle(AGACDUGUMPTR agacptr, int veri) {
/*Her defasında tek dalı ağaç oluşturuyor. daha sonra ikili arama ağacındaki kurala göre sol veya
sağ dala yerleştiriliyor*/
if(agacptr==NULL) {
/*eğer ağaç işaretçisi boş ise ağaca eklenecek yeni düğüm için hafızada yer ayrlıyor*/
agacptr=(agacdugum*)malloc(sizeof(agacdugum));
if(agacptr!=NULL) {
//Düğümler tek hücre, sağ ve sol dalları boş olarak oluşturuluyor
//printf("Ağaca veri eklendi\n");
agacptr->data=veri;
agacptr->soldal=NULL;
agacptr->sagdal=NULL;
}
else
printf("%d eklenmedi.Bellek yetersiz.\n",veri);
}
/*Gelen veri değeri daha önce girilen değerler ile karşılaştırılıp
uygun düğümün sol veya sağ dalına yerleştiriliyor.*/
else
if(veri<agacptr->data) {
printf("Agacin soluna veri eklendi\n");
agacptr->soldal=dugumekle(agacptr->soldal,veri);
}
else
if(veri>agacptr->data) {
printf("Agacin sagina veri eklendi \n ");
agacptr->sagdal=dugumekle(agacptr->sagdal,veri);
}
//eğer girilen değerler daha önce vars ise alınmıyor
else printf
("Esit oldugu icin alinmadi\n");
return agacptr;
}
/*Ağacın inOrder dolaşması*/
void inorder(AGACDUGUMPTR agacptr) {
if(agacptr!=NULL) {
inorder(agacptr->soldal);
printf("%3d",agacptr->data);
inoder(agacptr->sagdal);
}
}
//Ağacin preorder dolaşması
void preorder(AGACDUGUMPTR agacptr) {
if(agacptr!=NULL) {
printf("%3d",agacptr->data);
inorder(agacptr->soldal);
inoder(agacptr->sagdal);
}
}
void postorder(AGACDUGUMPTR agacptr) {
if(agacptr!=NULL) {
inorder(agacptr->soldal);
inoder(agacptr->sagdal);
printf("%3d",agacptr->data);
}
}
int main(int argc, char *argv[]) {
int i,dugum;
AGACDUGUMPTR agacptr=NULL;
for(i=0;i<12;i++) {
/*Ağaca yerleştirilecek sayılar*/
scanf("%d",&dugum); printf("\n");
//Girilen değeri düğüm ekelme fonksiyonuna gönderiyoruz
agacptr=dugumekle(agacptr,dugum);
}
prinft("\n");
printf("Agacin preorder dolasmasi :\n ");
preorder(agacptr); printf("\n");
printf("Agacin inorder dolasmasi :\n ");
inorder(agacptr); printf("\n");
printf("Agacin postorder dolasmasi :\n ");
postorder(agacptr); printf("\n");
return 0;
}
Yorumlar