Bölüm 16: Kılavuzlu İkili Ağaçlar

Boş bağları dolaşım ardıllarına dönüştürmek
Boş bağlarKılavuzEtiketInorder ardılDolaşımEkleme
C ile Veri Yapıları · İki ciltlik ders notları temel alınmıştır

Hazırlık

Başlamadan Önce

C ön bilgisi

Dizi, gösterge, struct, fonksiyon ve dinamik bellek temellerini hatırla.

İlk kavram

Boş bağlar ve Kılavuz

Bu bölümün hedefi

Boş çocuk bağının inorder öncül veya ardılı gösterebilmesini anlatmak.

Başlangıç sorusu

n düğümlü ikili ağaçta kaç boş çocuk bağı vardır?

Giriş

Öğrenme Çıktıları

Kılavuzu açıklamak

Boş çocuk bağının inorder öncül veya ardılı gösterebilmesini anlatmak.

Bağı ayırt etmek

Etiket bitiyle çocuk ve kılavuz göstergesini ayırmak.

Ardılı bulmak

Yığın ve özyineleme kullanmadan inorder sonraki düğüme geçmek.

Ekleme yapmak

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 kılavuz

Sol çocuk yoksa inorder öncülü gösterebilir.

Sağ kılavuz

Sağ çocuk yoksa inorder ardılı gösterebilir.

Etiket biti

Bağın çocuk mu kılavuz mu olduğunu bildirir.

Dolaşım

Ek yığın olmadan sıralı ilerleme sağlar.

Temel Kavramlar

Kavram Haritası

1Boş bağlar
2Kılavuz
3Etiket
4Inorder ardıl
5Dolaşım
6Ekleme
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.

Gösterim

Çocuk bağı ile kılavuz bağı aynı şey değildir

BağEtiketAnlam
sol0gerçek sol çocuk
sol1inorder öncül
sağ0gerçek sağ çocuk
sağ1inorder 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;
Tür tanımı veri yapısının bellekteki biçimini; yordamlar ise bu yapı üzerindeki davranışı kurar.

C ile Gerçekleştirim

C'de Bellek ve Sahiplik

Sahip kim?

Ayrılan belleği hangi yapı veya yordamın bırakacağını baştan belirle.

Yaşam süresi

Yerel değişken adresini fonksiyon dışına taşırma; dinamik belleği gerektiği kadar yaşat.

Sınırlar

Boyut, kapasite ve geçerli indisleri her işlemde koru.

Boş durum

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;
}
Kod örnekleri C99/C11 uyumlu olacak biçimde küçük ve tek sorumluluklu tutulmuştur.

Temel İşlemler

Kodu Okurken

Ön koşul

n düğümlü ikili ağaçta kaç boş çocuk bağı vardır?

Değişmez

Her adımda sol kılavuz kuralı korunuyor mu?

Son koşul

Etiket bitiyle çocuk ve kılavuz göstergesini ayırmak.

Hata yolu

Etiketleri güncellemeden göstergeyi değiştirmek

Adım Adım

Ardıl iki durumda bulunur

Sağ kılavuz var

Gösterge doğrudan inorder ardılı gösterir.

Gerçek sağ çocuk var

Önce sağ alt ağaca geç.

Sola in

Sağ alt ağacın en soldaki düğümünü bul.

Bitir

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

İşlemZamanEk bellek
Tek ardılamortize O(1)O(1)
Tüm inorder dolaşımO(n)O(1)
Kılavuz kurmaO(n)O(h)
BST aramaO(h)O(1)
EklemeO(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?

Kılavuzlu ağaç

Sık inorder dolaşım ve düşük ek bellek istendiğinde.

Baba göstergesi

Yukarı hareket başka işlemler için de gerekiyorsa.

Yığınlı dolaşım

Yapı değiştirilemeyecekse.

Morris dolaşımı

Geçici bağ değişimi kabul ediliyorsa O(1) ek bellek için.

Dikkat

Sık Yapılan Hatalar

1Kılavuzu çocuk sanarak alt ağaca girmek
2Etiketleri güncellemeden göstergeyi değiştirmek
3Eklemede öncül ve ardıl bağlarını koparmak
4Başlık/sentinel düğüm politikasını tutarsız kullanmak

Alıştırmalar

Kendini Sına

  1. n düğümlü ikili ağaçta kaç boş çocuk bağı vardır?
  2. Etiket biti neden gerekir?
  3. Sağ kılavuz varsa ardıl nasıl bulunur?
  4. Kılavuzlu inorder ek bellek maliyeti nedir?
  5. Eklemede hangi bağlar güncellenir?
Cevapları göster
  1. n+1.
  2. Gösterge çocuk mu kılavuz mu ayırmak için.
  3. Doğrudan sağ göstergenin değeri.
  4. O(1).
  5. Babanın çocuk bağı ile yeni düğümün öncül/ardıl kılavuzları.

Uygulama

Mini Laboratuvar

1 · Çiz

n düğümlü ikili ağaçta kaç boş çocuk bağı vardır?

2 · Kodla

Sağ kılavuz varsa ardıl nasıl bulunur?

3 · Ölç

Eklemede hangi bağlar güncellenir?

Teslim: küçük bir C modülü, üç uç test ve zaman/bellek karmaşıklığı tablosu.

Özet

Bölüm Özeti

Boş bağ değerlidir

Öncül ve ardıl bilgisi taşır.

Etiket zorunludur

Bağın anlamı ayrı tutulur.

Dolaşım O(1) alan

Yığınsız inorder mümkün olur.

Özet

Kaynaklar ve Devam

Son

Bölüm 16: Kılavuzlu İkili Ağaçlar
Ders planına dön
1 / 1 C ile Veri Yapıları