Sedat DURMUŞ ve Programlama Sanatı
sedatdurmuscomputereng  
 
  Sirali İkili Ağaç 14.03.2025 16:05 (UTC)
   
 

                                                                                 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;
  
   }
  

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
INFOMELDUNG_LOGINBOX
Bugün 21 ziyaretçi (93 klik) kişi burdaydı!
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol