PDA

Tam Sürümünü Görmek İçin : C ile ikili arama ağacı kodu


yeminer
07/06/2006, 11:43
Arkadaşlar elinde C ile yazılmış ikili arama ağacı kodu olan var mı ?

Olan varsa çok işime yarayacak, şimdiden teşekkürler.


wooodini
08/06/2006, 19:59
http://en.wikipedia.org/wiki/Binary_search

bu işini görür..

yeminer
10/06/2006, 16:26
Ben de C ile bir tane yazdım, ihtiyacı olan arkadaşlar olursa bunu kullanabilirler.
Borland C++ da yazılmıştır, ikili arama ağacı, ekleme, listeleme ve arama yapabiliyor. Silmeye ihtiyacım olmadığı için yazmadım.

#include "stdio.h"
#include "stdlib.h"
#include "conio.h"

typedef struct liste{
int bilgi;
char yazi[20];
struct liste *sag,*sol;
}bListe;

bListe *kok=NULL;

bListe *okuklavye();
int listele();
void yazekrana(bListe *veri);
void ekle(bListe *agackok,bListe *yeni);
bListe *ara(bListe *agackok,int aranan);


void main()
{
bListe *yeni,*adres;
int bilgi,miktar;
char secim;
while(1){
printf("Secimini yap\nekleme(E)\nlisteleme(L)\nara(A)\n");
scanf("%c",&secim);
switch(secim){
case 'E':
yeni=okuklavye();
ekle(kok,yeni);
break;

case 'A':
printf("Aranani giriniz\n");
scanf("%d",&bilgi);
adres=ara(kok,bilgi);
if(adres==NULL){
printf("Aranan bulunamadi..\n");
}
else{
clrscr();
printf("\n----------------------Sonuclar-------------------------\n");
yazekrana(adres);
printf("\n-------------------------------------------------------\n");
}
break;

case 'L':
clrscr();
printf("\n----------------------LISTE------------------------\n");
if(kok!=NULL){
listele(kok);
printf("\n---------------------------------------------------\n");
}
else{
printf("Bos liste!\n");
printf("\n---------------------------------------------------\n");
}
break;

default:
printf("uygun secim yapmadiniz.");
}
}
}


bListe *okuklavye()
{
bListe *okunan;
clrscr();
okunan=malloc(sizeof(bListe));

if(okunan==NULL)
return NULL;

printf("Numarasini giriniz.");
scanf("%d",&okunan->bilgi);
printf("Adini giriniz");
scanf("%s",&okunan->yazi);
okunan->sol=NULL;
okunan->sag=NULL;
return okunan;
}



void ekle(bListe *agackok,bListe *yeni)
{
clrscr();
if(agackok==NULL) kok=yeni;
else
{
if(yeni->bilgi<=agackok->bilgi)
{
if(agackok->sol==NULL)
agackok->sol=yeni;
else
ekle(agackok->sol,yeni);
}
else{
if(agackok->sag==NULL)
agackok->sag=yeni;
else
ekle(agackok->sag,yeni);
}
}
}


int listele(bListe *agackok){
if(agackok!=NULL){
listele(agackok->sol);
yazekrana(agackok);
listele(agackok->sag);
}
return 0;
}

bListe *ara(bListe *agackok,int aranan){
while(agackok!=NULL&&agackok->bilgi!=aranan){
if(aranan<agackok->bilgi)
agackok=agackok->sol;
else
agackok=agackok->sag;
}
return agackok;
}

void yazekrana(bListe *yazilacak){
printf("yazi:%s\n", yazilacak->yazi);
}