Bölüm 10: Arama Ağaçları
Klasik Soru · Arama Ağaçları
Soru 1: BST Ekleme ve Silme
Verilen ikili arama ağacına sırasıyla ekle 42, ekle 67, sil 30, sil 70, sil 20 uygulanıyor. İki çocuklu düğüm silinirken ardıl (sağ alt ağacın en küçüğü) kullanılıyor. Son hâli çiziniz.
Cevabı göster
- 42 → 45'in solu; 67 → 65'in sağı.
- sil 30 (iki çocuk): ardıl 35 (yaprak) 30'un yerine yazılır, eski 35 silinir.
- sil 70 (iki çocuk): ardıl 80 70'in yerine yazılır.
- sil 20: yaprak, doğrudan silinir.
Kontrol (inorder): 35 40 42 45 50 60 65 67 80
Klasik Soru · Arama Ağaçları
Soru 2: Arama Yolu, Min/Max, Ardıl
Önceki sorudaki başlangıç ağacı için:
(a) 65 ve 38 aranırken hangi düğümlerle karşılaştırma yapılır?
(b) En küçük ve en büyük değer nasıl bulunur?
(c) 45'in ve 50'nin ardılı (successor) nedir?
(d) Bu işlemlerin karmaşıklığı nedir?
(e) BST'de aynı değerli düğüm olabilir mi?
Cevabı göster
- (a) 65: 50 → 70 → 60 → 65 (bulundu, 4 karşılaştırma). 38: 50 → 30 → 40 → 35 → sağ çocuk yok → bulunamadı.
- (b) Min: sürekli sola git → 20. Max: sürekli sağa git → 80.
- (c) 45'in sağ alt ağacı yok → atalar arasında, sol çocuğu üzerinden gelinen ilk ata: 50. 50'nin ardılı: sağ alt ağacın en küçüğü → 60.
- (d) Hepsi O(h): dengeli ağaçta O(log n), dengesizde O(n).
- (e) Tasarıma bağlıdır: izin verilirse eşitler hep aynı tarafa (ör. sağa) eklenir ya da düğümde sayaç tutulur; izin verilmezse ekleme yok sayılır veya hata verilir.
Klasik Soru · Arama Ağaçları
Soru 3: AVL Ağacına Ekleme
Boş bir AVL ağacına sırasıyla 10, 20, 30, 40, 50, 25 ekleniyor. Her dengesizlikte hangi düğümde, hangi tür döndürme (LL, RR, LR, RL) yapıldığını yazınız ve son ağacı çiziniz. Aynı sırayla normal BST'ye eklenseydi yükseklik ne olurdu?
Cevabı göster
- 10, 20, 30: 10'da denge −2, sağ-sağ → RR (sola döndürme) 10'da → kök 20.
- 40 eklenir (30'un sağı). 50: 30'da denge −2, sağ-sağ → RR 30'da → 20(10, 40(30, 50)).
- 25: 20 → 40 → 30'un soluna. 20'de denge −2, sağ çocuk 40 sola ağır → RL: önce 40'ta sağa, sonra 20'de sola döndürme.
Son ağaç (preorder): 30 20 10 25 40 50, yükseklik 2.
Normal BST'de sıralı ekleme zincir oluşturur: yükseklik 4. AVL yüksekliği O(log n)'de tutar.
Klasik Soru · Arama Ağaçları
Soru 4: Dengesiz Ağaç Sorunu
(a) 1, 2, 3, 4, 5, 6, 7 anahtarları bu sırayla boş bir BST'ye eklenirse ağacın biçimi ve yüksekliği ne olur? Arama maliyeti nedir?
(b) Aynı anahtarlar hangi sırayla eklenirse mükemmel dengeli ağaç oluşur?
(c) Dengeyi otomatik koruyan iki yapı adı veriniz ve yükseklik garantilerini yazınız.
Cevabı göster
- (a) Her anahtar öncekinin sağına eklenir: sağa yatık zincir (bağlı liste gibi). Yükseklik 6 = n − 1; arama O(n).
- (b) Önce orta, sonra her yarının ortası:
4, 2, 6, 1, 3, 5, 7. Yükseklik 2 = ⌊log₂7⌋. - (c) AVL: her düğümde alt ağaç yükseklik farkı ≤ 1, h ≤ 1,44 log₂n. Kırmızı-siyah: her yolda siyah düğüm sayısı eşit, h ≤ 2 log₂(n+1). İkisinde de işlemler O(log n); Java
TreeMapkırmızı-siyah ağaçtır.
Çoktan Seçmeli · Arama Ağaçları
Test 1
Boş BST'ye sırasıyla 40, 20, 60, 10, 30 ekleniyor. 30'un ebeveyni hangisidir?
30 < 40 → sola (20); 30 > 20 → 20'nin sağına.
Hangi ağaç bir ikili arama ağacı değildir?
12, 10'un sol alt ağacındadır ama 10'dan büyüktür. Yalnızca ebeveynle değil, tüm atalarla karşılaştırma tutarlı olmalıdır.
Çoktan Seçmeli · Arama Ağaçları
Test 2
AVL ağacında bir düğümün denge faktörü (sol yükseklik − sağ yükseklik) hangi değerleri alabilir?
|denge| ≥ 2 olunca döndürme ile denge geri kazanılır.
n düğümlü kırmızı-siyah ağaçta aramanın en kötü durumu nedir?
Yükseklik ≤ 2 log₂(n + 1) garanti edilir. Dengesiz bir BST'de en kötü durum O(n) olurdu.
Adım Adım Çalıştırma · Arama Ağaçları
BST'de Arama
Aşağıdaki BST'de önce 65, sonra 38 aranıyor. Ziyaret edilen düğümleri izleyin.
Önce tahmin edin: iki arama kaçar karşılaştırma yapar?
ara(kok, 65): 50 ≠ 65.
65 > 50 → sağa.
65 < 70 → sola.
65 > 60 → sağa.
k.veri == x → bulundu. 4 düğüm ziyaret edildi.
ara(kok, 38): 38 < 50 → sola.
38 > 30 → sağa.
38 < 40 → sola.
38 > 35 → sağa, ama 35'in sağ çocuğu yok.
k == null → bulunamadı. Maliyet yol uzunluğu kadar: O(h).
Dugum ara(Dugum k, int x) { while (k != null && k.veri != x) { if (x < k.veri) k = k.sol; else k = k.sag; } return k; } System.out.println(ara(kok, 65) != null); System.out.println(ara(kok, 38) != null);
Ucu Açık Soru · Arama Ağaçları
Sözlük Uygulaması
- Bir sözlük uygulamasında kelime ekleme, kelime arama ve "ab" ile başlayan tüm kelimeleri alfabetik listeleme işlemleri var.
HashMapmi,TreeMap(dengeli BST) mi? Gerekçelendirin. - Kelimeler sözlüğe alfabetik sırayla toplu olarak yüklenirse dengesiz bir BST'de ne olur? TreeMap bu durumdan nasıl etkilenir?
Örnek cevap ve değerlendirme ölçütleri
1. HashMap arama/eklemede ortalama O(1) verir ama sıra tutmaz; önek sorgusu tüm tabloyu tarayıp sıralamayı gerektirir (O(n log n)). TreeMap anahtarları sıralı tutar: ekleme/arama O(log n), önek aralığı subMap("ab", "ac") ile O(log n + k) (k: sonuç sayısı) zamanda, zaten alfabetik gelir. Önek sorguları ağırlıktaysa TreeMap uygundur. Önek odaklı özel yapı: trie.
2. Dengesiz BST'de sıralı ekleme her düğümü öncekinin sağına koyar: ağaç bir zincire (bağlı listeye) dönüşür, yükseklik n − 1, işlemler O(n), toplam yükleme O(n²). TreeMap kırmızı-siyah ağaçtır; döndürmelerle yüksekliği O(log n)'de tuttuğu için etkilenmez.
Değerlendirme: işlem bazında karmaşıklık · sıralı/aralık sorgusu gereksinimi · sıralı eklemenin dengesiz BST'ye etkisi · dengeli ağacın garantisi.