Title: Ikili Aga
1Ikili AgaçlarIkili Arama Agaçlari
2Agaçlar
- Baglantili listedeki erisim zamani lineerdir.
- Çogu islemlerin (operasyon) (arama, ekleme,
silme) çalisma zamanini daha aza indiren - (O(log N) gibi) baska bir veri yapisi var midir?
3Agaçlar
- Agaç dügümlerin koleksiyonudur.
- Koleksiyon bos olabilir
- Eger bos degilse, agaç birbirlerinden fakli r kök
dügümünü ve sifir veya birden fazla bos olmayan
T1, T2, ...., Tk altagaçlarini içerir, herbiri r
den gelen bir yönlendirilmis kenar ile köke
baglidir.
4Bazi tanimlar
- Çocuk ve ebeveyn
- Kök hariç her dügümün bir ebeveyni vardir.
- Bir dügümün çocuk sayisi degisebilir.
- Yapraklar
- Çocugu olmayan dügümlere denir.
- Kardes
- Ebeveyni ayni olan dügümlerdir.
5Bazi Tanimlar
- Patika yol - Path
- Uzunluk - Length
- Bir yoldaki kenar sayisi
- Bir dügümün derinligi
- Kökten dügüme olan tekil yolun uzunlugu
- Bir agacin derinligi en derinde bulunan yapragin
derinligine esittir. - Bir dügümün yüksekligi
- Dügümden bir yapraga olan en uzun yola denir.
- Bütün yapraklar yükseklik 0 da bulunur
- Bir agacin yüksekligi kökün yüksekligine egittir.
- Ata (veya dede) ve torun
6Örnek UNIX dizini
7Ikili Agaçlar
- Bu agaçta hiçbir dügümün ikiden fazla çocugu
olamaz - Ortalama bir ikili agacin derinligi N den
küçüktür, en kötü durumda bile derinlik N-1
olabilir.
8Örnekifade agaçlari
- Yapraklar terim (sabit veya degisken)
- Diger dügümler islem
- Bazi islemler binary degilse ikili agaçta
gösterilemeyebilir.
9Agaç Gezme (Tree Traversal)
- Bir agaçtaki verileri belli bir düzende yazmak
için kullanilir. - Önce-kök Gezme (Pre-order traversal)
- Kökteki veriyi yaz
- Sol altagaçtaki verileri iteratif olarak yaz
- Sag altagaçtaki verileri iteratif olarak yaz
10Öncekök, sonrakök, ve içkökPreorder, Postorder
and Inorder
- Öncekök gezme
- dügüm, sol, sag
- önek ifadesi
- abcdefg
11Öncekök, sonrakök, ve içkök
- Sonrakök gezme
- Sol, sag, dügüm
- Sonek ifadesi
- abcdefg
- Içkök yazma
- Sol, dügüm, sag
- Içek ifadesi
- abcdefg
12 13 14Öncekök, sonrakök, ve içkök
15Ikili Agaçlar
- Ikili agaç SVY üzerindeki muhtemel islemler
- parent - ebeveyn
- left_child, right_child - sol_çocuk, sag_çocuk
- Sibling - kardes
- root, etc - kök
- Gerçeklestirmesi
- Ikili agaçta en fazla iki çocuk oldugu için,
bunlar için pointer kullanabiliriz.
16Karsilastirma Genel bir agaç gerçeklestirilmesi
17Ikili Arama Agaci
- Anahtarlari dügümler içinde depolar böylece
arama, ekleme ve silme etkili bir sekilde
yapilabilir. - Ikili arama agaç özelligi
- Herbir X dügümü için, solundaki altagaçtaki
(subtree) anahtarlar X dügümünde bulunan degerden
daha küçüktür, ve sagindaki agaçtaki anahtarlar X
dügümünde bulunan degerden daha büyüktür.
18Ikili Arama Agaçlari
Bir ikili arama agaci
Ikili arama agaci degil
19Ikili Arama Agaçlari
Ayni elemanlari gösteren iki ikili arama agaci
- Bir dügümün ortalama derinligi O(log N) maksimum
derinligi ise O(N)
20Gerçeklestirme
21IAA Arama
- Eger 15i ariyorsak arama islemi biter.
- Eger aranan anahtar lt 15 ise, sol altagaçta
aramaya devam edilir. - Eger aranan anahtar gt 15 ise, sag altagaçta
aramaya devam edilir.
22(No Transcript)
23Arama (Bul - Find)
- Find X X anahtarini bulunduran dügümün pointer
ini dönder veya eger böyle bir dügüm yok ise NULL
dönder. - Zaman Karmasikligi
- O(agaç yüksekligi)
24IAAinda içkök gezme
- Bütün anahtarlari siralanmis bir sekilde getirir.
içkök 2, 3, 4, 6, 7, 9, 13, 15, 17, 18, 20
25findMin/ findMax
- Agaçtaki en küçük elemani içeren dügümü dönderir.
- Kökten basla ve sol çocuk var oldugu sürece sola
git. Durma noktasindaki eleman en küçük
elemandir. - findMax için de mantik benzer sekildedir.
- Zaman karmasikligi O(agaç yüksekligi)
26Ekle - insert
- Agaçta ilgili yere find komutunda oldugu gibi git
- Eger X varsa, bir sey yapma (veya bir sey
güncelle) - Diger durumda, X i gezilen yoldaki en son noktaya
ekle. - Zaman Karmasikligi O(agaç yüksekligi)
27Sil - delete
- Bir dügüm silindigi zaman, silinen dügümün
çocuklarina nasil yerlestirecegimizi düsünmemis
gerekir. - Bu islem arama agaci (search tree) özelliginin
korunmasi için gereklidir.
28sil
- Üç durum vardir
- (1) dügüm yaprak ise
- sil
- (2) dügümün tek çocugu varsa
- Ebeveynden bir çocuga bir pointer ata
29sil
- (3) dügümün 2 çocugu varsa
- Silinen dügüm anahtarini sag altagaçtaki minimum
elemanla yer degistir (replace the key of that
node with the minimum element at the right
subtree ) - Minimum elemani sil
- Daha sonra ya hiç çocuk kalmamistir yada bir
çocuk vardir. Bu durumda durum 1 ve 2 uygulanir.. - Zaman karmasikligi O(agaç yüksekligi)