Oğuz arkadaşımın uyarısını dikkate alıp konuyu daha detaylı bir şekilde inceleyelim.
Birçok programcının en az bir defa karşısına çıkan yada çıkma olasılığı yüksek bir konu olan Binary Tree (İkili Ağaç)’yi inceleyeceğiz. Ağaç yapısının kullanım alanlarını göz önüne aldığımızda, arama işlemleri, parsing işlemleri, matematiksel ifadelerin uyarlanması ( örneğin a^3 + b * (c - d) gibi ), sıkıştırma algoritmaları, verilerin sıralanması, işletim sistemlerindeki dosya sistemi, oyun programlama, veri tabanı yönetim sitemleri (dbms) ve daha birçok uygulamada sıklıkla kullanılan bir veri yapısı olduğundan bu konu ile karşılaşma olasılığımızın neden çok yüksek olduğunu daha iyi anlayabiliriz.
Ağaç veri yapısını incelemeye başladığımızda yukardaki şekilde de görüldüğü gibi bir çok düğümden (node) oluşmaktadır ve bu düğümler sonlu sayıdadır(örneğin B, F, K ...). Eğer özel bir ağaç modeli oluşturmak istenildiğinde herbir düğümün n tane düğümü olabilir. Kök (root) düğüm (A düğümü) denilen özel bir düğüme sahiptir ve herhangi bir düğümden yukarı doğru çıkıldığında kök düğüme ulaşılır. Kök düğümün sağ tarafındaki daldan oluşan ağaca sağ alt ağaç(D, F), sol tarafındaki daldan oluşan ağaca ise sol alt ağaç(B, C, E, K, L) denir. Bir düğüme bağlanan sağ ve sol düğümlere alt (child) düğüm(B’nin alt düğümleri E ve C dir) denir. Bir düğümün bağlı olduğu düğüme üst (parent) ( K ve L nin parenti E) düğüm denir. Eğer bir düğümün sağ ve sol alt düğümleri yoksa bu tür düğümlere yaprak (leaf) düğüm denir. İki düğüm aynı üst düğüme sahip ise bu iki düğüme kardeş (sibling) düğüm denir. Ağacımızı oluşturan herhangi bir düğümü incelediğimizde, öncelikle bu düğümde tutulacak veri kısmı daha sonra sağ ve sol alt düğümler ile bağlantı oluşturacak göstericilerden oluştuğunu görürüz :C dilindeki gösterimi

Bu kodu sadece üyeler görüntüleyebilir! Üye olmak için
tıklayın Üye iseniz
giriş yapın.
Ağaç veri yapısında, düğüm ekleme ,silme, arama, tüm düğümleri silme, kök düğümü oluşturma ve ağaç düğümlerini dolaşma işlemlerini gerçekleştirebiliriz. Bu işlemleri ikili ağaç veri yapısı üzerinde gerçekleştirelim. İkili ağaç veri yapısında herbir düğümün en fazla 2 adet alt düğümü olabilir. Tabi unutmamamak gerekir ki bir düğüm hiçbir alt düğüme sahip olmayabilir. Aslında ikili ağaçlar daha önceden incelediğimiz bağlı listelerin özel biçimi de diyebiliriz. İkili ağaçların önemli özelliği eğer sıralanırsa çok hızlı bir şekilde ekleme, silme arama işlemlerini yapabilabilmesidir. Ağaç veri yapısı üzerinde işlem yapan fonksiyonların birçoğu kendi kendini çağıran (recursive) fonksiyonlardır. Çünkü bir ağacı alt ağaçlara böldüğümüzde elde edilen her parça yine bir ağaç olacaktır ve fonksiyonumuz yine bu ağaç üzerinde işlem yapacağı için kendi kendini çağıracaktır. İkili ağaç yapısının önemli bir özelliği de düğümlerin yerleştirilmesi sırasında uygulanan işlemlerdir. İkli ağaçlarda kök hücresinden başlayarak, eğer eklenecek düğümün veri kısmındaki değer, kök düğümünün veri kısmındaki değerden büyük ise sağ tarafa , küçük yada eşit ise sol tarafa eklenir.Bu şekilde olşturulan sıralı ikili ağaçta biliriz ki , sol alt ağaçtaki düğümlerde kökten küçük ya da köke eşit değerler, sağ alt ağaçtaki düğümlerde ise kökten büyük değerler bulunur.
Ağaç yapısı üzerinde herhangi bir düğüme erişme sürecimize ağacı gezmek (traverse) denir. Bir ağacı ençok bilinen üç değişik yöntemle gezebiliriz :
1- Sıralı (inorder) : İlk adımda sol alt ağaç sıralı şekilde dolaşılır . Kök düğüme uğranır . Son adımda sağ alt ağaç sıralı şekilde dolaşılır.
2- Kökten Başlayarak (preorder) : İlk adımda köke uğranır. Sol alt ağaç kökten başlayarak dolaşılır. Son adımda sol alt ağaç kökten başlayarak dolaşılır .
3-Sondan Başlayarak (postorder) : İlk adımda sol alt ağaç sondan başlayarak dolaşılır . İkinci adımda sağ alt ağaç sondan başlayarak dolaşılır . Son adımda ise köke uğranır.
Yapacağımız uygulamalarda ağacın sıralı olmasını istemeyebiliriz. Buna karşın birçok uygulamada ağacın sıralı olması gerekliliği ile karşılaşırız. Tabiki bir ağacın sıralı yada sırasız olması ağacın dolaşım şekline göre belirlenir. Sıklıkla kullanılan ağaç şekli sıralı ağaç olduğunda bizde örneklerimizi sıralı ağaç veri yapısı üzerinde gerçekleştireceğiz. Bu nedenle ağacı yapılandırırken, sol alt ağacın kökten küçük veya eşit değerler içerdiğini, sağ alt ağacın ise kökten büyük değerler içerdiğini göz önünde bulundurmalıyız.
Oğuz arkadaşıma bana tavsiyeleri ile yol gösterdiği için çok teşekkür ederim.
Kendisinden site olarak öğreneceğimiz çok şey var.
Herkese kolay gelsin.
Saygılarımla.
Seyhan Uçar
