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

Bölüm 7: Ağaçlar · Çalışma Soruları
GezinmelerAğacı yeniden kurmaDizi gösterimiÖzyinelemeli metotlarDüğüm sayıları
Klasik · çoktan seçmeli · adım adım çalıştırmalı · ucu açık sorular. Önce kendiniz çözün, sonra cevabı açın. · Sercan KÜLCÜ

Klasik Soru · Ağaç

Soru 1: Ağaç Gezinmeleri

Kökü 45 olan ikili ağaç için (a) kök önde (preorder), (b) kök ortada (inorder), (c) kök sonda (postorder) ve (d) seviye sıralı (level-order) gezinme çıktılarını yazınız. (e) Ağacın yüksekliği ve yaprakları nelerdir?

510253530226080857045
Cevabı göster
  • (a) Preorder: 45 22 10 5 30 25 35 70 60 85 80
  • (b) Inorder: 5 10 22 25 30 35 45 60 70 80 85
  • (c) Postorder: 5 10 25 35 30 22 60 80 85 70 45
  • (d) Level-order: 45 22 70 10 30 60 85 5 25 35 80
  • (e) Yükseklik: 3 (kökten en derin yaprağa kenar sayısı). Yapraklar: 5, 25, 35, 60, 80.

Inorder çıktısı sıralı olduğu için bu ağaç bir ikili arama ağacıdır. Level-order gezinme kuyrukla yapılır.

Klasik Soru · Ağaç

Soru 2: Gezinmelerden Ağacı Kurma

Bir ikili ağacın gezinmeleri verilmiştir. Ağacı çiziniz ve postorder çıktısını yazınız.
Preorder: A B D E C F G H
Inorder:  D B E A F C G H

İpucu: Preorder'ın ilk elemanı köktür. Inorder'da kökün solu sol alt ağaç, sağı sağ alt ağaçtır. Aynı adımı alt ağaçlara özyinelemeli uygulayın.

Cevabı göster

Kök A. Inorder'da A'nın solu {D, B, E}, sağı {F, C, G, H}.

Sol: preorder'da sıradaki B → kök B, solu D, sağı E.
Sağ: sıradaki C → kök C, solu F, sağı {G, H}; G kök, H onun sağ çocuğu.

DEBFHGCA

Postorder: D E B F H G C A

Not: Yalnızca preorder + postorder ile ağaç her zaman tek türlü kurulamaz; inorder gereklidir.

Klasik Soru · Ağaç

Soru 3: Ağacın Dizi Gösterimi

Tam ikili ağaç 0 indisli dizide saklanıyor: [50, 30, 70, 20, 40, 60, 80, 10].
(a) i. düğümün sol/sağ çocuğu ve ebeveyni hangi indistedir?
(b) 40'ın ebeveyni ve 20'nin çocukları nelerdir?
(c) Ağacı çiziniz; yüksekliği nedir?
(d) Bu gösterim neden "tam" ağaçlar için uygundur?

Cevabı göster
  • (a) sol = 2i + 1, sağ = 2i + 2, ebeveyn = (i − 1) / 2 (tam sayı bölmesi).
  • (b) 40 indis 4 → ebeveyn (4−1)/2 = 1 → 30. 20 indis 3 → sol 7 → 10, sağ 8 → yok (n = 8).
5030702040608010
  • (c) Yükseklik ⌊log₂8⌋ = 3.
  • (d) Tam ağaçta dizide boşluk kalmaz; işaretçi tutmaya gerek yoktur. Dengesiz bir ağaçta boş indisler belleği israf eder (en kötü 2ⁿ hücre).

Klasik Soru · Ağaç

Soru 4: Özyinelemeli Ağaç Metotları

Dugum sınıfında veri, sol, sag alanları vardır. Aşağıdaki metotları özyinelemeli olarak yazınız:
(a) yaprakSay(kok)
(b) yukseklik(kok) (boş ağaç −1, tek düğüm 0)
(c) toplam(kok): tüm değerlerin toplamı
Yukarıdaki 45 köklü ağaç için sonuçlar nedir?

Cevabı göster
int yaprakSay(Dugum k) {
    if (k == null) return 0;
    if (k.sol == null && k.sag == null) return 1;
    return yaprakSay(k.sol) + yaprakSay(k.sag);
}
int yukseklik(Dugum k) {
    if (k == null) return -1;
    return 1 + Math.max(yukseklik(k.sol),
                        yukseklik(k.sag));
}
int toplam(Dugum k) {
    if (k == null) return 0;
    return k.veri + toplam(k.sol) + toplam(k.sag);
}

45 köklü ağaç: yaprak = 5, yükseklik = 3, toplam = 467.

Her düğüm bir kez ziyaret edilir: O(n) zaman; yığın derinliği O(h).

Klasik Soru · Ağaç

Soru 5: Düğüm Sayıları

(a) Yüksekliği 4 olan mükemmel ikili ağaçta kaç düğüm ve kaç yaprak vardır?
(b) 100 düğümlü tam ikili ağacın yüksekliği nedir?
(c) 100 düğümlü bir ikili ağacın en büyük yüksekliği nedir?
(d) Dolu (full), tam (complete) ve mükemmel (perfect) ağaç farkı nedir?

Cevabı göster
  • (a) Düğüm = 2h+1 − 1 = 2⁵ − 1 = 31; yaprak = 2h = 16.
  • (b) ⌊log₂100⌋ = 6 (2⁶ = 64 ≤ 100 < 128).
  • (c) Her düğümün tek çocuğu olursa (zincir) yükseklik n − 1 = 99.
  • (d) Dolu: her düğümün 0 ya da 2 çocuğu var. Tam: son seviye hariç tüm seviyeler dolu, son seviye soldan doldurulmuş. Mükemmel: tüm iç düğümlerin 2 çocuğu var ve tüm yapraklar aynı seviyede.

Çoktan Seçmeli · Ağaç

Test 1

15 düğümlü mükemmel ikili ağacın yüksekliği nedir? (Tek düğüm: 0)

2h+1 − 1 = 15 → h = 3.

Bir ikili ağaçta preorder = A B C, inorder = B A C. Postorder nedir?

Kök A; inorder'da solunda B, sağında C. Postorder: sol, sağ, kök → B C A.

Çoktan Seçmeli · Ağaç

Test 2

n düğümlü bir ikili ağaçta kaç tane null çocuk referansı vardır?

Toplam 2n referans var; n − 1 tanesi kenardır (kök hariç her düğümün bir ebeveyni var). 2n − (n − 1) = n + 1.

Ağacı seviye seviye (level-order) gezmek için hangi yapı kullanılır?

Kök kuyruğa konur; her çıkarılan düğümün çocukları sona eklenir. Bu, ağaç üzerinde BFS'dir.

Adım Adım Çalıştırma · Ağaç

Özyinelemeli Inorder Gezinme

Kökü 5 olan ağaçta inorder(kok) çağrısının çağrı yığınını ve çıktısını izleyin.

2385

Önce tahmin edin: çıktı ne olur?

2385

inorder(5): k null değil.

2385

5 bekler; önce sol alt ağaç: inorder(3).

2385

3 de önce soluna iner: inorder(2).

2385

inorder(null): hemen döner.

2385

Sol bitti: 2 yazdırılır.

2385

2'nin sağı null; inorder(2) biter.

2385

3'e dönülür ve 3 yazdırılır.

2385

3'ün sağı null; inorder(3) biter.

2385

Köke dönülür: 5 yazdırılır.

2385

Sağ alt ağaç: inorder(8).

2385

8'in solu null; 8 yazdırılır.

2385

Tüm çağrılar döner. Çıktı sıralı → bu bir BST. Her düğüm bir kez: O(n); yığın derinliği O(h).

void inorder(Dugum k) {
    if (k == null) return;
    inorder(k.sol);
    System.out.print(k.veri + " ");
    inorder(k.sag);
}
// inorder(kok);

Ucu Açık Soru · Ağaç

Dosya Sistemi Ağacı

  1. Klasör ve dosyalardan oluşan bir dosya sistemini ağaçla modelleyin. Bir düğümde hangi alanlar olmalıdır? Neden ikili ağaç yetmez?
  2. Bir klasörün toplam boyutunu hesaplamak için hangi gezinme (preorder / inorder / postorder / level-order) uygundur? Klasör ağacını girintili yazdırmak için hangisi?
Örnek cevap ve değerlendirme ölçütleri

1. Genel ağaç: düğümde ad, tur (dosya/klasör), boyut, ebeveyn ve List<Dugum> cocuklar. Bir klasörün çocuk sayısı sınırsızdır; bu yüzden ikili ağaç (en fazla 2 çocuk) uymaz. (Gerekirse "ilk çocuk – sonraki kardeş" gösterimiyle ikili ağaca dönüştürülebilir.)

2. Toplam boyut: postorder. Önce tüm çocukların boyutu hesaplanır, sonra klasörünkü: boyut(k) = k.boyut + Σ boyut(c). Girintili listeleme: preorder. Klasör, içeriğinden önce yazılır; derinlik kadar girinti verilir. Inorder genel ağaçta tanımlı değildir. Level-order "en üst seviyedeki klasörler" gibi sorgular için kullanılır.

Değerlendirme: genel ağaç ve düğüm alanları · ikili ağacın neden yetmediği · doğru gezinme seçimi ve gerekçesi · özyinelemeli formül.

Son

Bölüm 7: Ağaçlar: Çalışma Soruları
Konu anlatımı: Ağaçlar sunumu
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.