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

Bölüm 9: Ağaçlar · Çalışma Soruları
Ağaç kavramıİkili ağaçlarGösterimlerGezinmelerÖzyinelemeli metotlarİfade ağacı ve yeniden kurma
Sercan KÜLCÜ

Çoktan Seçmeli · Ağaç Kavramı

Soru 1: Kenar Sayısı ve Döngü

Bağlantılı (connected), 10 düğümlü ve 10 kenarlı bir yapı için hangisi kesinlikle doğrudur?

B. n düğümlü ağaçta her zaman n − 1 = 9 kenar vardır. Bağlantılı bir yapıya 10. kenar eklenirse zaten yolu olan iki düğüm ikinci kez bağlanır ve döngü oluşur. A yanlıştır: bağlantılı olmak yetmez, kenar sayısı da n − 1 olmalıdır.

Çoktan Seçmeli · Ağaç Kavramı

Soru 2: Ağaç İlişkileri

Şekildeki ağaç için hangisi doğrudur?

RPQSTUVWXYZ

D. Atalar, düğümden köke giden yoldaki düğümlerdir: Y → W → Q → R. A yanlıştır: U'nun ebeveyni P, V'ninki Q; aynı derinlikte olmak kardeşlik için yetmez. B'de X eksik: soy, alt ağacın tamamıdır (T, U, X). S'nin çocuğu yoktur, yapraktır.

Klasik Soru · Ağaç Kavramı

Soru 3: Derinlik ve Yükseklik

Şekildeki ağaçta P, W ve X düğümlerinin derinliğini ve yüksekliğini kenar sayısıyla bulun. Ağacın yüksekliği kaçtır?

RPQSTUVWXYZ
Cevabı göster
DüğümDerinlikYükseklik
P12 (P→T→X)
W21 (W→Y)
X30 (yaprak)

Derinlik kökten aşağı (R'nin derinliği 0), yükseklik düğümden en uzak yaprağa doğru ölçülür.

Ağacın yüksekliği = kökün yüksekliği = en büyük derinlik = 3 (R→P→T→X ya da R→Q→W→Y).

Düğüm sayısıyla ölçen kaynaklarda tüm değerler 1 fazla çıkar (ağaç yüksekliği 4).

Çoktan Seçmeli · Ağaç Kavramı

Soru 4: ADT ile yukseklik(Q)

Aşağıdaki metot şekildeki ağaçta yukseklik(Q) için çağrılıyor. Dönen değer ve metodun toplam çağrılma sayısı nedir?

int yukseklik(Konum<E> p) {
    int h = 0;
    for (Konum<E> c : cocuklar(p))
        h = Math.max(h, 1 + yukseklik(c));
    return h;
}
RPQSTUVWXYZ

A. V yapraktır (0). W'nin çocukları Y, Z yaprak → W = 1. Q = max(1 + 0, 1 + 1) = 2. Yalnızca Q'nun alt ağacı gezilir: Q, V, W, Y, Z → 5 çağrı. B yanlıştır: yükseklik aşağı doğru bakar; ağacın geri kalanı (R, P, S…) ziyaret edilmez.

Klasik Soru · İkili Ağaçlar

Soru 5: Dolu, Tam, Mükemmel

Şekildeki T1 ve T2 ikili ağaçlarının her biri dolu (full), tam (complete) ve mükemmel (perfect) özelliklerinden hangilerini taşır?

1234567123456T1T2
Cevabı göster
DoluTamMükemmel
T1evethayırhayır
T2hayırevethayır

T1: her düğümün 0 ya da 2 çocuğu var → dolu. Ama 3'ün altı boşken en alt seviye 4'ün altında → son seviyeden önceki seviye dolu değil, tam değil.

T2: son seviye (4, 5, 6) soldan sağa boşluksuz → tam. 3'ün tek çocuğu var → dolu değil.

İkisi de mükemmel değildir: yapraklar aynı derinlikte değil (T1) ya da bir iç düğüm tek çocuklu (T2).

Çoktan Seçmeli · İkili Ağaçlar

Soru 6: Her Zaman Doğru Olan

Aşağıdakilerden hangisi her ikili ağaç için doğrudur?

B. Mükemmel ağaçta tüm iç düğümlerin 2 çocuğu var (dolu) ve tüm seviyeler dolu (tam). A ve C yanlıştır: dolu ve tam birbirini gerektirmez (önceki sorudaki T1 dolu ama tam değil, T2 tam ama dolu değil). D: tam ağaçta yapraklar son iki seviyeye dağılabilir.

Klasik Soru · İkili Ağaçlar

Soru 7: Yükseklik Sınırları

1000 düğümlü bir ikili ağacın yüksekliği en az ve en çok kaç olabilir? Gerekçelendirin.

Cevabı göster

En çok 999: her düğümün tek çocuğu olduğu çarpık (zincir) ağaçta h = n − 1.

En az 9 = ⌊log2 1000⌋. Yüksekliği h olan ikili ağaç en fazla 2h+1 − 1 düğüm tutar: h = 8 → 511 < 1000 yetmez; h = 9 → 1023 ≥ 1000 yeter.

Genel kural: ⌊log2 n⌋ ≤ h ≤ n − 1. Ağaç işlemleri yüksekliğe bağlı olduğundan dengeli ağaçta ≈ 10, çarpık ağaçta ≈ 1000 adım gerekir.

Klasik Soru · Gösterimler

Soru 8: Diziden Ağacı Çizme

Bir ikili ağaç 1 tabanlı dizide saklanmıştır (indis 0 kullanılmıyor, – boş hücre). Bu ağacı çizin.
indis: 1 2 3 4 5 6 7 8 9 10
a[i]: A B C D E – F – – G

Cevabı göster

1 tabanlıda sol = 2i, sağ = 2i + 1, ebeveyn = ⌊i/2⌋.

  • B (2), C (3): A'nın sol ve sağ çocukları. D (4), E (5): B'nin çocukları.
  • 6 boş → C'nin sol çocuğu yok; F (7) → C'nin sağ çocuğu.
  • G (10): ebeveyn ⌊10/2⌋ = 5 → E; 10 çift → E'nin sol çocuğu.
ABCDEFG

Çoktan Seçmeli · Gösterimler

Soru 9: 0 Tabanlı İndis Formülü

Bir ikili ağaç 0 tabanlı dizide saklanıyor (kök indis 0'da). İndis 6'daki düğümün ebeveyninin ve sol çocuğunun indisleri nedir?

C. 0 tabanlıda ebeveyn = ⌊(i − 1)/2⌋ = ⌊5/2⌋ = 2, sol çocuk = 2i + 1 = 13 (sağ çocuk 14). A, 1 tabanlı formüller (⌊i/2⌋ ve 2i) kullanılınca çıkan sık bir hatadır.

Çoktan Seçmeli · Gösterimler

Soru 10: null Referans Sayısı

Sol/sağ referanslı bağlı gösterimde 50 düğümlü bir ikili ağaçta toplam kaç null çocuk referansı vardır?

D. Her düğümde 2 referans → 2n = 100. Bunlardan n − 1 = 49'u kenardır (kök hariç her düğümü ebeveyni gösterir). Kalan 100 − 49 = 51 = n + 1 referans null'dır. A, dolu referansların (kenarların) sayısıdır.

Klasik Soru · Gezinmeler

Soru 11: Kök Başta ve Kök Sonda

Şekildeki ikili ağacın kök başta (preorder) ve kök sonda (postorder) gezinme çıktılarını yazın.

FBGADICEH
Cevabı göster

Kök başta (kök → sol → sağ): F B A D C E G I H

Kök sonda (sol → sağ → kök): A C E D B H I G F

Kök başta çıktısının ilk öğesi, kök sonda çıktısının son öğesi köktür (F). G'nin sol çocuğu olmadığından kök başta G'den hemen sonra sağ alt ağaç (I, H) gelir.

Karşılaştırma: kök ortada çıktısı A B C D E F G H I sıralıdır → bu ağaç bir BST'dir.

Adım Adım Çalıştırma · Gezinmeler

Soru 12: Yığın ile Kök Ortada

Kökü 8 olan ağaçta (8'in çocukları 3 ve 10; 3'ün çocukları 1 ve 6; 10'un yalnızca sağ çocuğu 14) kokOrtadaYigin(kok) ne yazdırır? (yigin: alt → üst)

83101614
83101614

gecici kökten (8) başlar; yığın boş.

83101614

8 itilir (sonra yazdırılacak), gecici = 8.sol = 3. Sola inmeye devam.

83101614

3 itilir, gecici = 3.sol = 1.

83101614

1 itilir, gecici = 1.sol = null. Sola gidilecek yer kalmadı.

83101614

gecici null → 1 çıkarılıp yazdırılır. gecici = 1.sag = null.

83101614

gecici null → 3 çıkarılıp yazdırılır. gecici = 3.sag = 6.

83101614

6 itilir, gecici = 6.sol = null.

83101614

6 çıkarılıp yazdırılır; gecici = 6.sag = null.

83101614

8 çıkarılıp yazdırılır (sol alt ağacı bitti); gecici = 8.sag = 10.

83101614

10 itilir, gecici = 10.sol = null.

83101614

10 çıkarılıp yazdırılır; gecici = 10.sag = 14.

83101614

14 itilir, gecici = 14.sol = null.

83101614

14 çıkarılıp yazdırılır; gecici = 14.sag = null.

83101614

Yığın boş ve gecici null → döngü biter. Çıktı sıralı (sol → kök → sağ); her düğüm bir kez itilip çıkarılır: O(n) zaman, O(h) yığın.

void kokOrtadaYigin(AgacDugumu kok) {
  Deque<AgacDugumu> yigin = new ArrayDeque<>();
  AgacDugumu gecici = kok;
  while (!yigin.isEmpty() || gecici != null) {
    if (gecici != null) {
      yigin.push(gecici);
      gecici = gecici.sol;
    } else {
      gecici = yigin.pop();
      System.out.print(gecici.veri + " ");
      gecici = gecici.sag;
    }
  }
}

Çoktan Seçmeli · Gezinmeler

Soru 13: Yığınlı Kök Başta Hatası

Aşağıdaki yığınlı kök başta kodu, 1'in çocukları 2 ve 3, 2'nin 4 ve 5, 3'ün 6 ve 7 olan ağaçta ne yazdırır?

void kokBastaYigin(AgacDugumu kok) {
  Deque<AgacDugumu> yigin = new ArrayDeque<>();
  yigin.push(kok);
  while (!yigin.isEmpty()) {
    AgacDugumu g = yigin.pop();
    System.out.print(g.veri + " ");
    if (g.sol != null) yigin.push(g.sol);
    if (g.sag != null) yigin.push(g.sag);
  }
}

B. Önce sol, sonra sağ itildiği için sağ çocuk yığının üstünde kalır (LIFO) ve önce o işlenir → kök, sağ, sol. Doğru kök başta için önce sağ, sonra sol itilmelidir; o zaman çıktı A (1 2 4 5 3 6 7) olurdu.

Adım Adım Çalıştırma · Gezinmeler

Soru 14: Kuyruk ile Seviye Sırası

Şekildeki ağaçta seviyeSirasi(kok) ne yazdırır? Her adımda kuyruğun içeriğini izleyin (kuyruk: ön → arka).

FBGADICEH
FBGADICEH

Kök kuyruğa eklenir. Kuyruk FIFO: önce eklenen önce çıkar.

FBGADICEH

poll() → F yazdırılır. F'nin çocukları B ve G arkaya eklenir.

FBGADICEH

poll() → B yazdırılır. B'nin çocukları A ve D, G'nin arkasına eklenir: önce 1. seviye bitecek.

FBGADICEH

poll() → G yazdırılır. G'nin sol çocuğu yok; yalnızca sağ çocuk I eklenir.

FBGADICEH

poll() → A yazdırılır. A yaprak: eklenecek çocuk yok.

FBGADICEH

poll() → D yazdırılır. D'nin çocukları C ve E eklenir.

FBGADICEH

poll() → I yazdırılır. I'nın yalnızca sol çocuğu H eklenir.

FBGADICEH

poll() → C yazdırılır. C yaprak.

FBGADICEH

poll() → E yazdırılır. E yaprak.

FBGADICEH

poll() → H yazdırılır. H yaprak; kuyruk boşaldı.

FBGADICEH

Kuyruk boş → döngü biter. Çıktı seviye seviye: F B G A D I C E H. Kuyrukta en çok 3 düğüm bulundu: ek bellek O(w), w = en geniş seviye.

void seviyeSirasi(AgacDugumu kok) {
  if (kok == null) return;
  Queue<AgacDugumu> kuyruk = new LinkedList<>();
  kuyruk.add(kok);
  while (!kuyruk.isEmpty()) {
    AgacDugumu g = kuyruk.poll();
    System.out.print(g.veri + " ");
    if (g.sol != null)
      kuyruk.add(g.sol);
    if (g.sag != null)
      kuyruk.add(g.sag);
  }
}

Klasik Soru · Gezinmeler

Soru 15: İfade Ağacı

Şekildeki ifade ağacının sonek (postfix) gösterimini yazın ve hesapla() metodunun (yaprak → sayı, iç düğüm → işleç) döndüreceği değeri bulun.

−×/+38462
Cevabı göster

Sonek = kök sonda gezinme: 6 2 + 3 × 8 4 / −

Değer: 6 + 2 = 8 → 8 × 3 = 24; 8 / 4 = 2; 24 − 2 = 22.

hesapla() kök sonda mantığıyla çalışır: bir işleç ancak iki alt ağacının değeri hesaplandıktan sonra uygulanır.

Karşılaştırma: önek (kök başta) − × + 6 2 3 / 8 4; ara ek (kök ortada) parantezsiz 6 + 2 × 3 − 8 / 4 yanlış okunur, her alt ağaç paranteze alınmalı: ((6 + 2) × 3) − (8 / 4).

Klasik Soru · Gezinmeler

Soru 16: Gezinmelerden Ağacı Kurma

Bir ikili ağacın gezinmeleri verilmiştir. Ağacı çizin ve kök sonda çıktısını yazın.
Kök başta: 1 2 4 7 3 5 6 8
Kök ortada: 4 7 2 1 5 3 8 6

Cevabı göster

Kök başta ilk öğe kök: 1. Kök ortada 1'in solu {4, 7, 2}, sağı {5, 3, 8, 6}. Sol: sıradaki 2 kök; solunda {4, 7}, sağı boş. 4 kök, 7 onun sağ çocuğu. Sağ: 3 kök; solu {5}, sağı {8, 6} → 6 kök, 8 sol çocuğu.

12345678

Kök sonda: 7 4 2 5 8 6 3 1

Çoktan Seçmeli · Gezinmeler

Soru 17: Gezinmelerin Ek Belleği

n düğümlü mükemmel ikili ağaçta kuyrukla seviye sırası gezinmenin ve özyinelemeli kök ortada gezinmenin ek belleği sırasıyla nedir?

A. Kuyruk en geniş seviye kadar büyür (O(w)); mükemmel ağaçta son seviyede ≈ n/2 düğüm vardır → O(n). Özyineleme ise O(h) çerçeve kullanır, mükemmel ağaçta h = log2(n + 1) − 1 → O(log n). B, seviye sırasının belleğini yükseklikle karıştırır. İkisinin de zamanı O(n)'dir.

Son

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