Skip to main content

🌲 İkili Ağaç (Binary Tree) Yüksekliği Nasıl Hesaplanır?


📘 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde, temel bir veri yapısı olan İkili Ağaç (Binary Tree) yüksekliği kavramını öğreneceksiniz.
Ağaç yüksekliğinin, kök düğümden (root) en uzaktaki yaprak düğüme (leaf) olan mesafe olduğunu göreceksiniz.
Son olarak, bu yüksekliği bulmak için kullanılan özyinelemeli algoritmanın mantığını ve C/C++ uygulamasını inceleyeceğiz.


🌿 1. İkili Ağaç Yüksekliği Nedir?

Bir ikili ağacın yüksekliği, kök düğümden herhangi bir yaprak düğüme olan en uzun yolun uzunluğu olarak tanımlanır.
Bu uzunluk, kökten yaprağa kadar olan kenar (edge) sayısı ile ölçülür.

📏 Boş bir ağacın yüksekliği 0’dır.
📍 Sadece kök düğümü varsa, yüksekliği 0 kabul edilir (bazı kaynaklarda 1 olarak da tanımlanır).

Aşağıdaki örnekte en uzun yolun uzunluğu 3’tür (10-20-40 veya 10-20-50):


10
/ \
20 30
/ \
40 50


Bu nedenle ağacın yüksekliği **3**’tür.

🧠 2. Özyinelemeli (Recursive) Hesaplama Mantığı

İkili ağaç yüksekliği genellikle özyineleme (recursion) kullanılarak hesaplanır.
Her düğüm için sol ve sağ alt ağaçların yüksekliği ayrı ayrı bulunur, büyük olan seçilir ve 1 eklenir.

Formül: $$ Yükseklik(Düğüm) = \max(Yükseklik(SolAltAğaç),\ Yükseklik(SağAltAğaç)) + 1 $$

📜 Adımlar:

  1. Temel Durum (Base Case): Eğer düğüm NULL ise yükseklik 0 döndürülür.
  2. Sol Alt Ağaç: Sol çocuğun yüksekliği özyinelemeli olarak hesaplanır.
  3. Sağ Alt Ağaç: Sağ çocuğun yüksekliği hesaplanır.
  4. Sonuç: Büyük olan değere +1 eklenerek döndürülür.

💻 3. C Dilinde Uygulama

Aşağıdaki örnek, bir ikili ağaç oluşturur ve yüksekliği hesaplar.

🌳 Ağaç Yapısı

#include <stdio.h>
#include <stdlib.h>

typedef struct Node Node;

// Ağaç düğümü tanımı
struct Node {
int value;
Node* left;
Node* right;
};

🧩 Her düğüm bir değer (value) ve iki alt düğüm işaretçisi içerir.


🧮 Özyinelemeli Yükseklik Fonksiyonu


int tree_height(Node* root) {
// Boş ağaçsa yükseklik 0’dır
if (!root)
return 0;

// Sol ve sağ alt ağaçların yüksekliklerini hesapla
int solYukseklik = tree_height(root->left);
int sagYukseklik = tree_height(root->right);

// Büyük olanı al ve 1 ekle
return (solYukseklik >= sagYukseklik)
? solYukseklik + 1
: sagYukseklik + 1;
}

🧠 Bu fonksiyon, ağacı özyinelemeli olarak gezerek en uzun yolu bulur.


⚙️ Ana Program


Node* create_node(int data) {
Node* node = (Node*) malloc(sizeof(Node));
node->value = data;
node->left = node->right = NULL;
return node;
}

int main() {
Node* root = create_node(10);

// Ağaca düğümler ekle
root->left = create_node(20);
root->right = create_node(30);
root->left->left = create_node(40);
root->left->right = create_node(50);

// Yüksekliği hesapla
int yukseklik = tree_height(root);
printf("Ikili Agacin Yuksekligi: %d\n", yukseklik);

return 0;
}

🧾 Çıktı:


Ikili Agacin Yuksekligi: 3

⏱️ 4. Zaman ve Bellek Karmaşıklığı

TürAçıklamaKarmaşıklık
Zaman KarmaşıklığıHer düğüm bir kez ziyaret edilir.O(N)
Bellek KullanımıÖzyinelemeli çağrılar yığında (stack) saklanır.O(h) (h: yükseklik)

❓ 5. Sıkça Sorulan Sorular (SSS)

1. Ağaç yüksekliği ile derinlik aynı şey mi?

Hayır. Derinlik bir düğümün köke olan uzaklığıdır; yükseklik ise kökten en derin düğüme olan uzaklıktır.

2. Özyineleme yerine yinelemeli çözüm kullanılabilir mi?

Evet, BFS (Breadth-First Search) yaklaşımı ile yinelemeli şekilde de hesaplanabilir.

3. malloc ne işe yarar?

malloc() dinamik bellek tahsisi yapar. Program çalışırken ağaç düğümleri için bellek ayırır.

4. Yüksekliği bilmek neden önemlidir?

Ağaç dengeleme (AVL, Red-Black Tree) veya arama algoritmalarında yüksekliğin bilinmesi performans açısından kritiktir.

5. Bulut sistemlerinde nasıl kullanılır?

İkili ağaç yapıları, veritabanı indeksleme, dosya sistemi organizasyonu ve yönlendirme (routing) algoritmalarında sıkça kullanılır.


🏁 Sonuç

İkili ağaç yüksekliği, ağaç tabanlı veri yapılarını anlamanın temelidir. Bu basit özyinelemeli algoritma ile, hem dengeli hem dengesiz ağaçlarda doğru yüksekliği bulabilirsiniz.

☁️ Bu mantığı Rabisu Bulut platformunda kendi C/C++ projelerinizde test ederek veri yapısı analizlerinizi güçlendirebilirsiniz.