C programlama dilinde ağaç yapısı, elemanları hiyerarşik bir şekilde organize etmek için kullanılan bir veri yapısıdır. Ağaç yapısı, bir kök düğümden başlayan ve dal ve yaprak düğümleri olarak bilinen bir dizi bağlantılı düğümden oluşur. Her düğüm, bir veri değeri ve bir veya daha fazla çocuk düğümü içerebilir. Ağaç yapısında düğümler, kendilerinden önceki bir düğüme "ebeveyn" ve kendilerinden sonraki bir veya daha fazla düğüme "çocuklar" denir. Kök düğüm, hiçbir ebeveyn düğümüne sahip olmayan, yani ağacın başlangıç noktasıdır. Yaprak düğümleri ise, hiçbir çocuk düğümüne sahip olmayan son düğümlerdir. Ağaç yapısı, birçok uygulamada kullanılabilir, örneğin arama algoritmaları, veritabanları, programlama dilleri, oyunlar ve daha pek çok alanda kullanılır. Ağaç yapısının birçok çeşidi vardır, örneğin AVL ağaçları, kırmızı-siyah ağaçları, ağaç tabanlı yapılar, karar ağaçları vb. Ağaç yapısının avantajı, elemanların hızlı bir şekilde ekleme, silme ve arama işlemlerini yapabilmesidir.
10
/ \
8 12
/ \ \
3 9 15
/ \
1 7
Bu ağaç yapısı, 10 sayısının kök düğüm olduğu ve bu düğümden başlayarak 8 ve 12 değerlerine sahip iki çocuk düğümüne sahip olduğu şeklinde tanımlanabilir. 8 ve 12 düğümleri de 3, 9 ve 15 değerlerine sahip çocuk düğümlere sahiptir. 9 düğümü, sırasıyla 1 ve 7 değerlerine sahip yaprak düğümlerine sahiptir.
Bu görsel, ağaç yapısının hiyerarşik yapısını ve elemanların nasıl organize edildiğini göstermektedir.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
typedef struct agac{
int sayi;
struct agac *sag,*sol;
}agc;
agc *root=NULL;
void ekle(agc *agckok,agc *eleman)
{
if(agckok==NULL)
{
root=eleman;
}
else
{
if(agckok->sayi>eleman->sayi)
{
if(agckok->sol==NULL)
{
agckok->sol=eleman;
}
else
{
ekle(agckok->sol,eleman);
}
}
else
{
if(agckok->sag==NULL)
{
agckok->sag=eleman;
}
else
{
ekle(agckok->sag,eleman);
}
}
}
}
void listele(agc *agckok)
{
if(agckok!=NULL)
{
listele(agckok->sol);
printf("Listelenen elemanlar:%d\n",agckok->sayi);
listele(agckok->sag);
}
}
agc *Ara(agc *agckok,int sayi1)
{
if(agckok!=NULL && agckok->sayi!=sayi1)
{
if(agckok->sayi<sayi1)
{
agckok=agckok->sag;
}
else
{
agckok=agckok->sol;
}
}
return agckok;
}
int main()
{
system("COLOR 3F");
int aranan;
char alf;
agc *yeleman,*donen;
printf("Eklemek icin 1...\nListelemek icin 2....\nAramak icin 3....\nCikmak icin 4....\n");
while(1)
{
scanf("%c",&alf);
switch(alf)
{
case '1':
yeleman=(agc*)malloc(sizeof(agc));
if(yeleman==NULL)
{
printf("Eklenecek yer kalmamistir");
}
printf("Eklenecek degeri giriniz....\n");
scanf("%d",&yeleman->sayi);
yeleman->sol=NULL;
yeleman->sag=NULL;
ekle(root,yeleman);
break;
case '2':
if(root!=NULL)
listele(root);
else
printf("Goruntulenecek eleman bulunamamistir!");
break;
case '3':
printf("Aranacak eleman degerini giriniz....\n");
scanf("%d",&aranan);
donen=Ara(root,aranan);
if(donen==NULL)
{
printf("Aranan eleman degeri bulunamaistir....\n");
}
else
{
printf("Aranan eleman degeri bulundu:%d\n",donen->sayi);
}
break;
case '5':
system("CLS");
exit(0);
break;
}
}
system("pause");
return 0;
}
0 Yorumlar
Bizimle fikirlerinizi paylaşabilirsiniz.