Hızlı arama, ekleme ve silme işlemleri sunan, dengeli ağaçlar (Red-Black, 2-3) ve bit tabanlı dijital indeksleme yapılarını (Patricia) kapsar.
Dengeli arama ağaçları, standart İkili Arama Ağacının (BST) en kötü durumda zincir listeye dönüşüp O(n) performansına gerilemesini önlemek amacıyla geliştirilmiş veri yapılarıdır.
Kırmızı-Siyah Ağaç (Red-Black Tree), her düğümü kırmızı veya siyah olarak etiketleyip belirli kurallar altında (örn. ardışık kırmızı düğüm olmaması) rotasyonlar ve renk değişimleri ile dengeyi O(log n) seviyesinde korur. 2-3 ve 2-3-4 Ağaçları ise tek bir düğümde birden fazla anahtar barındırarak yukarıdan aşağıya (top-down) bölünmelerle genişler.
Dijital Arama Ağaçları (Digital Search Trees) ve Patricia Ağacı (Patricia Tree), anahtarların doğrudan karşılaştırılması yerine, bitlerinin soldan sağa taranarak sol/sağ alt dallara yönlenmesini sağlayan, string ve sayı arama işlemlerinde son derece hızlı ve bellek verimli olan trie-tabanlı yapılardır.
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1class RBTNode {2 val: number;3 color: 'RED' | 'BLACK';4 left: RBTNode | null = null;5 right: RBTNode | null = null;6 constructor(val: number) {7 this.val = val;8 this.color = 'RED';9 }10}1112class RedBlackTree {13 root: RBTNode | null = null;1415 insert(val: number, trace: string[]) {16 trace.push(`${val} ağaca ekleniyor.`);17 this.root = this.insertRec(this.root, val, trace);18 this.root.color = 'BLACK'; // Kök her zaman siyahtır19 }2021 private insertRec(node: RBTNode | null, val: number, trace: string[]): RBTNode {22 if (node === null) return new RBTNode(val);2324 if (val < node.val) {25 node.left = this.insertRec(node.left, val, trace);26 } else if (val > node.val) {27 node.right = this.insertRec(node.right, val, trace);28 }2930 // Dengelenme kuralları simülasyonu31 if (this.isRed(node.right) && !this.isRed(node.left)) {32 trace.push(`Sola rotasyon yapılıyor: Node ${node.val}`);33 node = this.rotateLeft(node);34 }35 if (this.isRed(node.left) && this.isRed(node.left?.left)) {36 trace.push(`Sağa rotasyon yapılıyor: Node ${node.val}`);37 node = this.rotateRight(node);38 }39 if (this.isRed(node.left) && this.isRed(node.right)) {40 trace.push(`Renk değişimi yapılıyor: Node ${node.val}`);41 this.flipColors(node);42 }4344 return node;45 }4647 private isRed(node: RBTNode | null): boolean {48 return node !== null && node.color === 'RED';49 }5051 private rotateLeft(h: RBTNode): RBTNode {52 const x = h.right!;53 h.right = x.left;54 x.left = h;55 x.color = h.color;56 h.color = 'RED';57 return x;58 }5960 private rotateRight(h: RBTNode): RBTNode {61 const x = h.left!;62 h.left = x.right;63 x.right = h;64 x.color = h.color;65 h.color = 'RED';66 return x;67 }6869 private flipColors(h: RBTNode) {70 h.color = 'RED';71 if (h.left) h.left.color = 'BLACK';72 if (h.right) h.right.color = 'BLACK';73 }74}Kırmızı-Siyah Ağaca sırayla eklenecek tam sayıları virgülle ayırarak girin. Örnek: 10,20,30,15,25
Kırmızı-Siyah Ağaca sırayla eklenecek tam sayıları virgülle ayırarak girin. Örnek: 10,20,30,15,25
En İyi Durum: O(log n)
Ortalama Durum: O(log n)
En Kötü Durum: O(log n)
O(n) - Çalışma süresi, giriş boyutu ile doğrusal olarak artar.
Ağaçlar ve Arama Ağaçları (Trees & Search Trees) Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar: