Bölüm 7: Ağaçlar

Hiyerarşi, ikili gösterim ve dolaşımlar
Terminolojiİkili ağaçGösterimPreorderInorderPostorder
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

Terminoloji ve İkili ağaç

Bu bölümün hedefi

Kök, baba, çocuk, kardeş, yaprak, düzey ve yükseklik kavramlarını ayırmak.

Başlangıç sorusu

Yaprak düğüm nedir?

Giriş

Öğrenme Çıktıları

Terminolojiyi kullanmak

Kök, baba, çocuk, kardeş, yaprak, düzey ve yükseklik kavramlarını ayırmak.

Gösterim kurmak

Tam ağacı diziyle, genel ağacı bağlaçlarla göstermek.

Dolaşmak

Kök önde, kök ortada ve kök sonda sıralarını üretmek.

Maliyeti açıklamak

Dolaşımın zaman ve çağrı yığını maliyetini hesaplamak.

Temel Kavramlar

Ağaç hiyerarşik ilişkileri temsil eder

Kök dışındaki her düğümün tek bir babası vardır; alt ağaçlar aynı yapının daha küçük örnekleridir.

Kök

Babası olmayan başlangıç düğümü.

Yaprak

Çocuğu olmayan düğüm.

Derinlik

Kökten düğüme kadar kenar sayısı.

Yükseklik

Düğümden en uzak yaprağa kadar kenar sayısı.

Temel Kavramlar

Kavram Haritası

1Terminoloji
2İkili ağaç
3Gösterim
4Preorder
5Inorder
6Postorder
Kök dışındaki her düğümün tek bir babası vardır; alt ağaçlar aynı yapının daha küçük örnekleridir.

Gösterim

İkili ağaçta her düğümün en çok iki çocuğu vardır

A
↙      ↘
BC
↙ ↘    ↙ ↘
DEFG

Preorder: A B D E C F G · Inorder: D B E A F C G · Postorder: D E B F G C A

C ile Gerçekleştirim

Bağlaçlı ikili ağaç düğümü

typedef struct AgacDugumu {
    int veri;
    struct AgacDugumu *sol;
    struct AgacDugumu *sag;
} AgacDugumu;
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 null kök durumunu atlamak riskiyle birlikte test et.

Temel İşlemler

Kök ortada dolaşım

void inorder(const AgacDugumu *kok) {
    if (kok == NULL) return;
    inorder(kok->sol);
    printf("%d ", kok->veri);
    inorder(kok->sag);
}
Kod örnekleri C99/C11 uyumlu olacak biçimde küçük ve tek sorumluluklu tutulmuştur.

Temel İşlemler

Kodu Okurken

Ön koşul

Yaprak düğüm nedir?

Değişmez

Her adımda kök kuralı korunuyor mu?

Son koşul

Tam ağacı diziyle, genel ağacı bağlaçlarla göstermek.

Hata yolu

Derinlik ile yüksekliği aynı sanmak

Adım Adım

Inorder dolaşım: D B E A F C G

Sola in

A → B → D. D'nin sol çocuğu NULL.

D ve B

D yazılır; geri dönülür; B yazılır.

E ve A

E alt ağacı işlenir; sonra A yazılır.

Sağ alt ağaç

C'nin solunda F, kökte C, sağında G yazılır.

Sınıf Notu

Dersten Sesler

“Bir halterciyi yüz kere seyretsem, yine de o halteri kaldıramam. 'Bu nasıl yazıldı?' sorusuna yoğunlaşın.”
“'Çok güzel çalışıyor da geri dönmüyor; çağırıyorum, çağırıyorum, tıkanıp kalıyor.' O zaman taban durumuna yeniden bakacağız.”

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
Tüm ağacı dolaşmaO(n)O(h)
Düğüm saymaO(n)O(h)
Yükseklik bulmaO(n)O(h)
Tam ağaçta dizi erişimiO(1)O(n)
Düzey düzey dolaşımO(n)O(w)

n: öğe sayısı · h: yükseklik · V: düğüm sayısı · E: kenar sayısı

Tasarım Kararı

Hangi Durumda Hangisi?

Dizi gösterimi

Ağaç tam veya tama yakınsa; heap gibi.

Bağlaçlı gösterim

Şekil düzensiz ve ekleme/silme varsa.

Özyineli dolaşım

Kod açıklığı önemli ve yükseklik güvenliyse.

İteratif dolaşım

Çağrı derinliği denetlenmek veya özel durum saklanmak isteniyorsa.

Dikkat

Sık Yapılan Hatalar

1NULL kök durumunu atlamak
2Derinlik ile yüksekliği aynı sanmak
3Tam ve tam dolu ikili ağacı karıştırmak
4Çarpık ağaçta özyineleme derinliğini küçümsemek

Alıştırmalar

Kendini Sına

  1. Yaprak düğüm nedir?
  2. Tam ikili ağacın dizi gösterimi neden verimlidir?
  3. Inorder dolaşımın işlem sırası nedir?
  4. Düzey düzey dolaşım hangi yardımcı yapıyı kullanır?
  5. Dolaşımın zaman maliyeti neden O(n)'dir?
Cevapları göster
  1. Çocuğu olmayan düğüm.
  2. İndisler arasında boşluk azdır ve çocuk adresleri formülle bulunur.
  3. sol alt ağaç, kök, sağ alt ağaç.
  4. Kuyruk.
  5. Her düğüm sabit sayıda kez ziyaret edilir.

Uygulama

Mini Laboratuvar

1 · Çiz

Yaprak düğüm nedir?

2 · Kodla

Inorder dolaşımın işlem sırası nedir?

3 · Ölç

Dolaşımın zaman maliyeti neden O(n)'dir?

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

Özet

Bölüm Özeti

Özyineli yapı

Her alt ağaç yine bir ağaçtır.

Üç temel dolaşım

Kökün işlem sırası sonucu belirler.

Yükseklik maliyeti

Ek bellek ve arama performansı h ile ilişkilidir.

Özet

Kaynaklar ve Devam

Son

Bölüm 7: Ağaçlar
Ders planına dön
1 / 1 C ile Veri Yapıları