Bölüm 16: Kılavuzlu İkili Ağaçlar
Hazırlık
Başlamadan Önce
Dizi, gösterge, struct, fonksiyon ve dinamik bellek temellerini hatırla.
Boş bağlar ve Kılavuz
Boş çocuk bağının inorder öncül veya ardılı gösterebilmesini anlatmak.
n düğümlü ikili ağaçta kaç boş çocuk bağı vardır?
Giriş
Öğrenme Çıktıları
Boş çocuk bağının inorder öncül veya ardılı gösterebilmesini anlatmak.
Etiket bitiyle çocuk ve kılavuz göstergesini ayırmak.
Yığın ve özyineleme kullanmadan inorder sonraki düğüme geçmek.
Yeni düğümde çocuk ve kılavuz bağlarını birlikte güncellemek.
Temel Kavramlar
Boş göstergeler dolaşım bilgisi taşıyabilir
n düğümlü ikili ağaçta n+1 boş çocuk bağı vardır; kılavuzlu ağaç bu alanı öncül ve ardıl için kullanır.
Sol çocuk yoksa inorder öncülü gösterebilir.
Sağ çocuk yoksa inorder ardılı gösterebilir.
Bağın çocuk mu kılavuz mu olduğunu bildirir.
Ek yığın olmadan sıralı ilerleme sağlar.
Temel Kavramlar
Kavram Haritası
Gösterim
Çocuk bağı ile kılavuz bağı aynı şey değildir
| Bağ | Etiket | Anlam |
|---|---|---|
| sol | 0 | gerçek sol çocuk |
| sol | 1 | inorder öncül |
| sağ | 0 | gerçek sağ çocuk |
| sağ | 1 | inorder ardıl |
C ile Gerçekleştirim
Etiketli düğüm
typedef struct Kilavuz {
int veri;
struct Kilavuz *sol, *sag;
unsigned sol_kilavuz : 1;
unsigned sag_kilavuz : 1;
} Kilavuz;C ile Gerçekleştirim
C'de Bellek ve Sahiplik
Ayrılan belleği hangi yapı veya yordamın bırakacağını baştan belirle.
Yerel değişken adresini fonksiyon dışına taşırma; dinamik belleği gerektiği kadar yaşat.
Boyut, kapasite ve geçerli indisleri her işlemde koru.
NULL, boş yapı ve tek öğe durumlarını özellikle kılavuzu çocuk sanarak alt ağaca girmek riskiyle birlikte test et.
Temel İşlemler
Inorder ardılı bul
Kilavuz *ardil(Kilavuz *p) {
if (p->sag_kilavuz) return p->sag;
p = p->sag;
while (p && !p->sol_kilavuz) p = p->sol;
return p;
}Temel İşlemler
Kodu Okurken
n düğümlü ikili ağaçta kaç boş çocuk bağı vardır?
Her adımda sol kılavuz kuralı korunuyor mu?
Etiket bitiyle çocuk ve kılavuz göstergesini ayırmak.
Etiketleri güncellemeden göstergeyi değiştirmek
Adım Adım
Ardıl iki durumda bulunur
Gösterge doğrudan inorder ardılı gösterir.
Önce sağ alt ağaca geç.
Sağ alt ağacın en soldaki düğümünü bul.
Bulunan düğüm inorder ardıldır; yoksa dolaşım bitmiştir.
Sınıf Notu
Dersten Sesler
“NULL mı kontrolü? Açıklama satırı? Tek yordama indirmek? Yazılım mühendisliği burada başlıyor.”
“Bir kez kurduğun bağı, dolaşımda tekrar tekrar aramayacaksın.”
Notlardaki sınıf içi anlatımdan, yazım ve uzunluk bakımından sunuma uyarlanmıştır.
Analiz
Karmaşıklık Özeti
| İşlem | Zaman | Ek bellek |
|---|---|---|
| Tek ardıl | amortize O(1) | O(1) |
| Tüm inorder dolaşım | O(n) | O(1) |
| Kılavuz kurma | O(n) | O(h) |
| BST arama | O(h) | O(1) |
| Ekleme | O(h) | O(1) |
n: öğe sayısı · h: yükseklik · V: düğüm sayısı · E: kenar sayısı
Tasarım Kararı
Hangi Durumda Hangisi?
Sık inorder dolaşım ve düşük ek bellek istendiğinde.
Yukarı hareket başka işlemler için de gerekiyorsa.
Yapı değiştirilemeyecekse.
Geçici bağ değişimi kabul ediliyorsa O(1) ek bellek için.
Dikkat
Sık Yapılan Hatalar
Alıştırmalar
Kendini Sına
- n düğümlü ikili ağaçta kaç boş çocuk bağı vardır?
- Etiket biti neden gerekir?
- Sağ kılavuz varsa ardıl nasıl bulunur?
- Kılavuzlu inorder ek bellek maliyeti nedir?
- Eklemede hangi bağlar güncellenir?
Cevapları göster
- n+1.
- Gösterge çocuk mu kılavuz mu ayırmak için.
- Doğrudan sağ göstergenin değeri.
- O(1).
- Babanın çocuk bağı ile yeni düğümün öncül/ardıl kılavuzları.
Uygulama
Mini Laboratuvar
n düğümlü ikili ağaçta kaç boş çocuk bağı vardır?
Sağ kılavuz varsa ardıl nasıl bulunur?
Eklemede hangi bağlar güncellenir?
Özet
Bölüm Özeti
Öncül ve ardıl bilgisi taşır.
Bağın anlamı ayrı tutulur.
Yığınsız inorder mümkün olur.
Özet
Kaynaklar ve Devam
- VYA2 kılavuzlu ikili ağaç bölümü
- Horowitz, Sahni ve Anderson-Freed, Fundamentals of Data Structures in C.
- Kernighan ve Ritchie, The C Programming Language.
Son
← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt