Kod:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct TREE{
int bilgi;
struct TREE *right,*left;
}Agac;
Agac *root=NULL;
void ekle(Agac *agackok,Agac*yeni)
{
if(agackok==NULL)//eğer ağaç boşsa
{
root=yeni;//yeni elemanı kök olarak ata
}
else//eğer ağaç boş değilse
{
if(yeni->bilgi<agackok->bilgi)//eğer yeni eklenen sayı kök sayıdan küçükse sola ekle
{
if(agackok->left==NULL)//eğer ağacın solu boşsa sola ilk olanı ekle
agackok->left=yeni;
else
ekle(agackok->left,yeni);//eğer solda eleman varsa solun bir soluna daha geç oraya ekle
}
else//eğer yeni eklenen sayı kökten küçük değilse sağa ekle
{
if(agackok->right==NULL)//eğer ağacın sağı boşsa elemanı ilk olarak ekle.
agackok->right=yeni;
else
ekle(agackok->right,yeni);//ağacın solunda eleman varsa sağın bir sağına ekle
}
}
}
void listele(Agac *agackok)
{
if(agackok!=NULL)
{
listele(agackok->left);//önce solu listeledik çünkü daima soldakiler sağdakilerden küçüktür.
printf("%d\n",agackok->bilgi);
listele(agackok->right);
}
}
Agac *ara(Agac *agackok,int aranan)
{
while(agackok!=NULL && agackok->bilgi!=aranan)
{
if(aranan<(agackok->bilgi))
agackok=agackok->left;
else
agackok=agackok->right;
}
return agackok;
}
int main()
{
Agac *yeni,*adres;
int sayi;
char secim;
while(1)
{
puts("Ekleme--E\nListeleme--L\nArama--A\nCikis--C\nSeciminiz\n");
secim=getch();
switch(secim)
{
case 'E': yeni=(Agac*)malloc(sizeof(Agac));
if(yeni==NULL)
{
puts("Bellek Dolu!!");
}
puts("Sayiyi Giriniz:");
scanf("%d",&(yeni->bilgi));
yeni->right=NULL;
yeni->left=NULL;
ekle(root,yeni);
break;
case 'L': if(root!=NULL)
listele(root);
else
puts("Liste Bos!");
break;
case 'A': puts("Aranan Sayi");
scanf("%d",&sayi);
adres=ara(root,sayi);
if(adres==NULL)
{
puts("Aranan Bulunamadi");
}
else
{
printf("Sayi:%d\n",adres->bilgi);
}
break;
case 'C': exit(0);
break;
default: puts("Yanlis secim!");
}
}
}