Ana içeriğe geç

Ağaç (Tree) Örneği

Aşağıdaki pseudo kod, bir ağaç veri yapısının örneğini oluşturur:

// Ağaç düğümleri
düğüm1 = {veri: 10, sol: NULL, sağ: NULL}
düğüm2 = {veri: 20, sol: NULL, sağ: NULL}
düğüm3 = {veri: 30, sol: NULL, sağ: NULL}
düğüm4 = {veri: 40, sol: NULL, sağ: NULL}
düğüm5 = {veri: 50, sol: NULL, sağ: NULL}

// Ağaç yapısı
kök = düğüm1
düğüm1.sol = düğüm2
düğüm1.sağ = düğüm3
düğüm2.sol = düğüm4
düğüm2.sağ = düğüm5

Ağaç Tanımlama

Aşağıdaki pseudo kod, 5 adet düğümden oluşan bir ağaç veri yapısını tanımlar:

// Ağaç düğümleri
düğüm1 = {veri: 10, sol: NULL, sağ: NULL}
düğüm2 = {veri: 20, sol: NULL, sağ: NULL}
düğüm3 = {veri: 30, sol: NULL, sağ: NULL}
düğüm4 = {veri: 40, sol: NULL, sağ: NULL}
düğüm5 = {veri: 50, sol: NULL, sağ: NULL}

// Ağaç yapısı
kök = düğüm1
düğüm1.sol = düğüm2
düğüm1.sağ = düğüm3
düğüm2.sol = düğüm4
düğüm2.sağ = düğüm5

Bu örnekte, her bir düğüm bir "veri" alanı ve sol/sağ dalları olan bir nesnedir. "kök" adlı bir değişken tanımlanır ve bu değişken "düğüm1" nesnesine eşitlenir. Bu da, "düğüm1" düğümünün ağacın kök düğümü olduğunu ifade eder. Sonrasında, diğer düğümler birbirine bağlanarak ağaç yapısı oluşturulur. Örneğin, "düğüm1" düğümünün sol dalına "düğüm2", sağ dalına ise "düğüm3" bağlanır.

Ağaca Eleman Ekleme

Aşağıdaki pseudo kod, bir ağaça yeni bir eleman ekleme işlemini göstermektedir:

// Yeni düğüm oluştur
yeni_düğüm = {veri: 25, sol: NULL, sağ: NULL}

// Ağaçta gezinerek uygun konuma ekle
gezici = kök
döngü:
// Yeni düğümün verisi, mevcut düğümün verisinden küçükse sol tarafa,
// büyükse sağ tarafa hareket et
eğer yeni_düğüm.veri < gezici.veri:
// Sol dallı düğüm yoksa, yeni düğümü ekle
eğer gezici.sol == NULL:
gezici.sol = yeni_düğüm
kır
// Sol tarafa hareket et
gezici = gezici.sol
değilse eğer yeni_düğüm.veri > gezici.veri:
// Sağ dallı düğüm yoksa, yeni düğümü ekle
eğer gezici.sağ == NULL:
gezici.sağ = yeni_düğüm
kır
// Sağ tarafa hareket et
gezici = gezici.sağ
değilse:
// Veri zaten ağaçta mevcut, işlemi iptal et
yazdır("Veri zaten ağaçta mevcut.")
kır
döngü sonu

Bu örnekte, yeni bir düğüm oluşturulur ve bu düğüm ağaca eklenecektir. Ağaçta gezinmek için bir "gezici" değişkeni oluşturulur ve bu değişken ağacın kök düğümüne eşitlenir. Ardından, bir döngü oluşturularak yeni düğümün uygun konuma eklenmesi için ağaçta gezinilir. Gezici düğümün verisi, yeni düğümün verisinden küçükse sol tarafa, büyükse sağ tarafa hareket edilir. Yeni düğümün eklenmesi uygun pozisyona geldiğinde, o pozisyonda yeni bir düğüm oluşturulur ve "sol" veya "sağ" değerleri ayarlanır.

Ağaçtan Eleman Çıkarma

Ağaçtan eleman çıkarma işlemi, silme işlemi olarak da bilinir. Bu işlem, belirli bir düğümü ağaçtan kaldırmayı ve ağacın doğru bir şekilde yeniden yapılandırılmasını gerektirir. Aşağıda, bir ağaçtan eleman çıkarma işlemini gerçekleştirmek için kullanılabilecek bir örnek pseudo kod bulunmaktadır:

ALGORİTMA eleman_cikar(dugum, ana_dugum)
ADIMLAR:
EĞER ana_dugum = NULL
SONUÇ DÖNDÜR
EĞER dugum = ana_dugum VE dugum'un sol ve sağ alt ağaçları NULL ise
dugum'u kaldır
SONUÇ DÖNDÜR
EĞER dugum'un sol alt ağacı NULL değilse
eleman_cikar(dugum'in sol alt ağacı, ana_dugum)
DURUMA GÖRE ağacı yeniden yapılandır
SONUÇ DÖNDÜR
EĞER dugum'un sağ alt ağacı NULL değilse
eleman_cikar(dugum'un sağ alt ağacı, ana_dugum)
DURUMA GÖRE ağacı yeniden yapılandır
SONUÇ DÖNDÜR
DURUMA GÖRE ağacı yeniden yapılandır

Bu pseudo kod, eleman_cikar adlı bir fonksiyon tanımlar. Bu fonksiyon, silinecek olan düğümü ve ağacın kök düğümünü alır. Fonksiyon, ağacı yeniden yapılandırmak için farklı durumlar değerlendirilir. Eğer silinecek düğüm, ağacın kök düğümüyse ve sol ve sağ alt ağaçları NULL ise, düğüm direkt olarak kaldırılır. Eğer silinecek düğüm, sol alt ağacı NULL değilse, bu alt ağaçta eleman silinir ve ağaç yeniden yapılandırılır. Aynı işlem sağ alt ağaç için de yapılır. Son olarak, ağaç yeniden yapılandırılır ve işlem tamamlanır.

Ağaçtaki En Küçük ve En Büyük Elemanlara Erişim

En küçük elemana erişim için pseudo kod:

fonksiyon en_kucuk_eleman(agac):
eger agac.bos() ise
hata firlat "Agac bos"
degilse:
eger agac.sol() bos ise
return agac.kok.veri
degilse:
return en_kucuk_eleman(agac.sol())

En büyük elemana erişim için pseudo kod:

fonksiyon en_buyuk_eleman(agac):
eger agac.bos() ise
hata firlat "Agac bos"
degilse:
eger agac.sag() bos ise
return agac.kok.veri
degilse:
return en_buyuk_eleman(agac.sag())

Ağaçta Dolaşma

Ağaçta dolaşmak için kullanılan üç farklı dolaşma tekniği vardır: ön sıralama (pre-order), iç sıralama (in-order) ve arka sıralama (post-order). Pseudo kodları aşağıda verilmiştir:

Ön Sıralama (Pre-order) Pseudo Kodu:

fonksiyon on_siralama(dugum):
eger dugum yoksa geri don
yazdir(dugum.veri)
on_siralama(dugum.sol)
on_siralama(dugum.sag)

İç Sıralama (In-order) Pseudo Kodu:

fonksiyon ic_siralama(dugum):
eger dugum yoksa geri don
ic_siralama(dugum.sol)
yazdir(dugum.veri)
ic_siralama(dugum.sag)

Arka Sıralama (Post-order) Pseudo Kodu:

fonksiyon arka_siralama(dugum):
eger dugum yoksa geri don
arka_siralama(dugum.sol)
arka_siralama(dugum.sag)
yazdir(dugum.veri)

Ağaçtaki Elemanların Derinliklerinin Hesaplanması

Aşağıda, ağaçtaki elemanların derinliklerini hesaplamak için özyinelemeli bir algoritma için bir pseudo kod örneği verilmiştir:

fonksiyon eleman_derinligi(dugum, derinlik):
eger dugum yoksa geri don
yazdir(dugum.veri, " düğümü ", derinlik, ". seviyede")
eleman_derinligi(dugum.sol, derinlik + 1)
eleman_derinligi(dugum.sag, derinlik + 1)

Bu özyinelemeli fonksiyon, ağacın her bir elemanını ziyaret eder ve elemanın derinliğini hesaplar. Fonksiyonun ilk parametresi, işlem yapılan düğümün kendisidir. İkinci parametre ise, o düğümün derinliğidir. Fonksiyon, düğüm boş değilse, düğümün verisini ve derinliğini yazdırır. Daha sonra, sol ve sağ alt ağaçlarına tekrar bu fonksiyonu çağırır ve derinliği bir arttırarak parametre olarak gönderir. Bu şekilde tüm elemanlar ziyaret edilir ve her elemanın derinliği hesaplanır.