Binary Tree
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
typedef struct liste{
int bilgi;
char mesaj[100];
struct liste *sağ,*sol;
}AGAC;
AGAC *kok=NULL;
//FONKSİYONLAR::..
AGAC *okuKlavye();
void ekle(AGAC *,AGAC *);
void listele(AGAC *);
void yazEkrana(AGAC *);
AGAC *ara(AGAC *,int );
int sayAgacDugum(AGAC *,int );
AGAC *sil(AGAC *,int );
int _tmain(int argc, _TCHAR* argv[])
{AGAC *yeni,*adres;
int bilgi,miktar;
char secim;
while(1){
cout<<endl<<"Ekleme"<<endl<<"Listeleme"<<endl<<"Arama"<<endl<<"Silme"<<"Miktar"<<endl<<"Cikis"<<endl<<"Seciminiz?:";
cin>>secim;
switch(secim){
case 'E':yeni=okuKlavye();
ekle(kok,yeni);
break;
case 'L':if(kok!=NULL)
listele(kok);
else cout<<"bos liste";
break;
case 'A': cout<<"Aranan:"; cin>>bilgi;
adres=ara(kok,bilgi);
if(adres==NULL)
cout<<"Aranan bulunamadi";
else yazEkrana(adres);
break;
case 'M':miktar=sayAgacDugum(kok,0);
cout<<"Agactaki toplam kayit sayisi:"<<miktar;
break;
case 'S':cout<<"Silinecek:"; cin>>bilgi;
adres=sil(kok,bilgi);
if(adres!=NULL)
cout<<"Silindi";
else cout<<"Silinmek istenen yok";
break;
case 'Ç':case 'ç':case 'c':case 'C': cout<<"Hoscakalin!!!";
exit(0);
default:
cout<<"Yanlis secim!!!";
}
}
getch();
return 0;
}
//bilgileri alan fonksiyon::..
AGAC *okuKlavye(){
AGAC *yeni;
yeni=new AGAC();
if(yeni==NULL){
cout<<"Bellek dolu";
return NULL;
}
cout<<"Bilgi giriniz:"; cin>>yeni->bilgi;
cout<<"Mesaj giriniz:"; cin>>yeni->mesaj;
yeni->sağ=NULL;
yeni->sol=NULL;
return yeni;
}
//yeni düğüm ekler::..
void ekle(AGAC *agacKok,AGAC *yeni){
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->sağ==NULL) agacKok->sağ=yeni;
else ekle(agacKok->sağ,yeni);
}
}
}
//listeme fonksiyonu::..
void listele(AGAC *agacKok){
if(agacKok!=NULL){
listele(agacKok->sol);
yazEkrana(agacKok);
listele(agacKok->sağ);
}
}
//yazdırma fonksiyonu::..
void yazEkrana(AGAC *veri){
cout<<"bilgi"<<veri->bilgi<<endl<<"mesaj"<<veri->mesaj<<endl;
}
//arama yapan fonksiyon::..
AGAC *ara(AGAC *agacKok,int aranan){
while(agacKok!=NULL&&agacKok->bilgi!=aranan){
if(aranan<agacKok->bilgi)
agacKok=agacKok->sol;
else agacKok=agacKok->sağ;
}
return agacKok;
}
//ağaçtaki elemen sayısı
int sayAgacDugum(AGAC *agacKok,int t){
if(agacKok==NULL) return t;
t++;
t=sayAgacDugum(agacKok->sol,t);
t=sayAgacDugum(agacKok->sağ,t);
return t;
}
//silme fonksiyonu
AGAC *sil(AGAC *agacKok,int silinecek){
AGAC *qa,*q,*qc,*sa,*s;
if(agacKok==NULL) return NULL;
q=agacKok;
qa=NULL;
while(q!=NULL&&q->bilgi!=silinecek){//silinecek olanın adresini bulur.
qa=q;
if(silinecek<=q->bilgi)
q=q->sol;
else q=q->sağ;
}
if(q==NULL)
return NULL;//aranan yok
if(q->sol!=NULL&&q->sağ!=NULL){//iki çocuğu varsa:::...
s=q->sol;
sa=s;
while(s->sağ!=NULL){//sol alt ağacın en büyük değeri aranır::..
sa=s;
s=s->sağ;
}
q->bilgi=s->bilgi;
strcpy(q->mesaj,s->mesaj);
q=s;
qa=sa;
}
if(q->sol!=NULL) qc=q->sol;
else qc=q->sağ;
if(q==agacKok) kok=qc;//silinecek olan kök mü?
else {
if(q==qa->sol)
qa->sol=qc;
else qa->sağ=qc;
}
free(q);
return q;
}