# Ağaç

Adres: https://softwaredictionary.org/tr/terimler/tree
Kategori: Veri Yapıları
Son güncelleme: 2026-09-30
İngilizcesi: Tree
Okunuşu: tri

Kısaca: Ağaç, kenarlarla bağlı düğümlerden oluşan hiyerarşik bir veri yapısıdır; en üstte tek bir kök düğüm ve altında dallanan çocuk düğümler bulunur.

## Ağaç (tree) veri yapısı nedir?

Ağaç, veriyi bir hiyerarşi olarak düzenler. Tek bir kök düğümden başlar ve diğer her düğümün tam olarak bir ebeveyni ve sıfır ya da daha fazla çocuğu vardır. Çocuğu olmayan düğümlere yaprak (leaf) denir ve kökten bir yaprağa inen en uzun yoldaki kenar sayısı ağacın yüksekliğidir. Her düğümün yalnızca bir ebeveyni olduğu için bir ağaç asla döngü, yani başladığı yere geri dönen bir yol içermez.

Bir soy ağacı ya da organizasyon şeması günlük hayattaki resimdir: en üstte bir kişi, aşağıya doğru yayılan dallar. Yaygın bir tür, her düğümün sol ve sağ olarak adlandırılan en fazla iki çocuğunun olduğu ikili ağaçtır (binary tree). İkili arama ağacında (BST) bir düğümün sol alt ağacındaki her değer düğümden küçük, sağ alt ağacındaki her değer büyüktür; bu yüzden ağaç dengeliyken arama, ekleme ve silme O(log n) sürer. Değerler sıralı gelirse sade bir BST uzun bir zincire dönüşür ve bu işlemler O(n)'e düşer; AVL ağaçları ve kırmızı-siyah ağaçlar gibi kendi kendini dengeleyen türlerin var olmasının nedeni budur.

Ağaçlar yazılımın her yerindedir. Tarayıcının DOM'u HTML öğelerinden oluşan bir ağaçtır, dosya sistemleri klasör ve dosya ağaçlarıdır, derleyiciler kaynak kodunu soyut sözdizimi ağacına ayrıştırır ve ilişkisel veritabanı indekslerinin çoğu, disk okumalarını düşük tutmak için tasarlanmış geniş ve sığ ağaçlar olan B-ağaçlarını kullanır. Heap'ler ve trie'ler (otomatik tamamlama için kullanılan önek ağaçları) de özelleşmiş ağaçlardır.

Ağaç, özel bir çizge türüdür: n düğümün tam olarak n - 1 kenarla birleştirildiği, döngüsüz ve bağlantılı bir çizge. Genel çizgeler döngülere izin verir ve herhangi bir düğümün herhangi bir diğerine bağlanmasına olanak tanır; bu yüzden gezinme kodunun bir düğümü iki kez ziyaret etmemek için ek kayıt tutması gerekir. Ayrıca bir ikili ağacın otomatik olarak bir ikili arama ağacı olmadığını unutmayın; BST, küçük solda büyük sağda sıralama kuralına sahip sürümdür.

## Önemli noktalar

- Ağacın bir kökü vardır ve diğer her düğümün tam olarak bir ebeveyni vardır.
- Çocuğu olmayan düğümlere yaprak denir.
- Dengeli bir ikili arama ağacı aramayı, eklemeyi ve silmeyi O(log n)'de yapar; dengesiz olan O(n)'e düşebilir.
- Ağaçlar derinlik öncelikli (preorder, inorder ya da postorder) veya genişlik öncelikli (seviye seviye) gezilir.
- DOM, dosya sistemleri ve veritabanı indeksleri birer ağaçtır.

## Örnek: Bir klasör ağacını özyinelemeyle gezmek

```javascript
const root = {
  name: "src", // the root node
  children: [
    { name: "index.js", children: [] }, // a leaf: it has no children
    { name: "utils", children: [{ name: "math.js", children: [] }] },
  ],
};

// Depth-first traversal: print a node, then visit each of its children
function printTree(node, depth = 0) {
  console.log("  ".repeat(depth) + node.name);
  node.children.forEach((child) => printTree(child, depth + 1));
}

printTree(root); // src, index.js, utils, math.js (indented by depth)
```

## Sık sorulan sorular

**Ağaç ile çizge arasındaki fark nedir?**

Ağaç kısıtlı bir çizgedir: bağlantılıdır, döngü içermez ve herhangi iki düğüm arasında tam olarak bir yol vardır. Çizge ise döngülere, kopuk parçalara ve herhangi bir bağlantı örüntüsüne sahip olabilir.

**İkili ağaç ile ikili arama ağacı arasındaki fark nedir?**

İkili ağaç yalnızca her düğümü en fazla iki çocukla sınırlar. İkili arama ağacı ise küçük değerlerin solda, büyük değerlerin sağda olması kuralını ekler; hızlı aramayı mümkün kılan da budur.

**Bir ağacın dengeli olması ne demektir?**

Dengeli ağaç, her düğümün alt ağaçlarının yüksekliğini benzer tutar; böylece tüm ağaç yaklaşık log n seviye yüksekliğinde kalır. Bu, O(log n) işlemleri garanti eder; dengesiz bir ağaç ise n seviye yüksekliğe çıkıp bir bağlı liste gibi davranabilir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
