Ağaç Düğümleri ve Yapısı
Bir düğümü işaretçilerle modelleyin.
Ağaç Düğümleri ve Yapısı, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.
İkili Ağaç Nedir
İkili ağaç, her düğümün bir değer ve en fazla iki çocukla (sol çocuk ve sağ çocuk) bağlantı tuttuğu hiyerarşik bir yapıdır.
En üstteki düğüm köktür. Çocuğu olmayan düğümler yapraktır. Bu yapı, ikili ağaçları hızlı arama, sıralama ve özyinelemeli işleme için çok elverişli kılar.
Node Yapısı
C dilinde bir düğümü, verileri ve kendisine başvuran iki göstericiyi saklayan bir struct ile modelleriz.
Her gösterici başka bir Node öğesini veya o tarafta çocuk yoksa NULL değerini gösterir.
struct Node {
int value;
struct Node *left;
struct Node *right;
};Kendisine Başvuran Göstericiler Neden Kullanılır
Bir düğüm, değer olarak başka bir tam düğüm içeremez; çünkü bu sonsuz miktarda depolama gerektirir. Bunun yerine çocuklarına göstericiler tutar.
Göstericilerin boyutu sabittir; bu nedenle struct bilinen bir boyutta kalırken yığındaki diğer düğümlere bağlanmayı sürdürür.
struct Node {
int value;
struct Node *left; /* 8 bytes on 64-bit */
struct Node *right; /* 8 bytes on 64-bit */
};Kolaylık İçin typedef
Her yerde struct Node yazmak zahmetlidir. Bir typedef yalnızca Node yazmamızı sağlar.
Tür o noktada henüz tamamen tanımlanmadığı için struct içinde etikete yine de ihtiyaç vardır.
typedef struct Node {
int value;
struct Node *left;
struct Node *right;
} Node;Node Ayırma
Düğümler yığında bulunur ve malloc ile oluşturulur. Değeri ayarlar, her iki çocuk göstericisini de NULL ile başlatırız.
Belleği kullanmadan önce malloc işlevinin NULL döndürmediğini her zaman denetleyin.
Node *create_node(int value) {
Node *n = malloc(sizeof(Node));
if (n == NULL) return NULL;
n->value = value;
n->left = NULL;
n->right = NULL;
return n;
}Elle Küçük Bir Ağaç Oluşturma
Bağlantıları anlamak için üç düğümü elle birbirine bağlayalım: iki çocuklu bir kök.
Bu program ağacı oluşturup değerleri yazdırır; ardından normalde ağacı serbest bırakırız (bu konu daha sonra ele alınacaktır).
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int value;
struct Node *left;
struct Node *right;
} Node;
Node *create_node(int v) {
Node *n = malloc(sizeof(Node));
n->value = v; n->left = NULL; n->right = NULL;
return n;
}
int main(void) {
Node *root = create_node(10);
root->left = create_node(5);
root->right = create_node(15);
printf("%d %d %d\n", root->left->value, root->value, root->right->value);
return 0;
}Torunlara Ulaşma
Ok işlecini zincirleyerek ağaçta ilerlersiniz. root->left->right önce sol çocuğa, ardından onun sağ çocuğuna iner.
Bir göstericiyi izlemeye başlamadan önce onun NULL olmadığından emin olun; aksi hâlde programınız çöker.
/* root
* \
* right (15)
* \
* right->right (20)
*/
if (root->right != NULL && root->right->right != NULL)
printf("%d\n", root->right->right->value);Düğümleri Özyinelemeli Olarak Sayma
Özyineleme ağaçlara doğal biçimde uyar. Düğümleri saymak için boş alt ağacın düğüm sayısı sıfırdır; aksi hâlde mevcut düğümü ve her iki alt ağacı sayarız.
NULL denetimi, özyinelemeyi durduran temel durumdur.
int count_nodes(Node *root) {
if (root == NULL) return 0;
return 1 + count_nodes(root->left)
+ count_nodes(root->right);
}Yüksekliği Ölçme
Bir ağacın yüksekliği, kökten bir yaprağa kadar olan en uzun yolun, kenar sayısıyla ölçülen uzunluğudur.
İki alt ağacın yüksekliklerinden büyük olanını alıp bir ekleriz. Tek bir düğümün yüksekliğinin 0 olması için boş ağaca -1 yüksekliği verilir.
int height(Node *root) {
if (root == NULL) return -1;
int l = height(root->left);
int r = height(root->right);
return 1 + (l > r ? l : r);
}Yaprakları Belirleme
Yaprak, çocuğu olmayan düğümdür: hem left hem de right NULL değerindedir.
Bu küçük yardımcı, birçok dolaşma ve sayma yordamında kullanışlıdır.
int is_leaf(Node *n) {
return n != NULL && n->left == NULL && n->right == NULL;
}Yapıyı Kullanıma Geçirme
Burada küçük bir ağaç oluşturulur ve özyinelemeli yardımcılarla düğüm sayısı ile yüksekliği bildirilir.
Yardımcıların sabit bir şekli varsaymadığına dikkat edin; özyineleme gerçek göstericileri izlediği için her ağaçta çalışırlar.
#include <stdio.h>
#include <stdlib.h>
typedef struct Node { int value; struct Node *left, *right; } Node;
Node *nn(int v){ Node *n=malloc(sizeof(Node)); n->value=v; n->left=n->right=NULL; return n; }
int count(Node *r){ return r? 1+count(r->left)+count(r->right):0; }
int height(Node *r){ if(!r) return -1; int l=height(r->left),x=height(r->right); return 1+(l>x?l:x); }
int main(void){
Node *root = nn(10);
root->left = nn(5); root->right = nn(15);
root->left->left = nn(2);
printf("nodes=%d height=%d\n", count(root), height(root));
return 0;
}Hızlı Kontrol
Düğüm yapısı konusundaki anlayışınızı sınayın.
Özet
Bir ikili ağaç düğümü bir değer ve kendisine başvuran iki gösterici (left, right) tutar; çocuk olmadığında bu göstericiler NULL olarak ayarlanır.
Düğümleri malloc ile ayırır, elle birbirine bağlar ve özyinelemeli olarak işleriz. NULL denetimi; sayma, yükseklik ve yaprak denetimleri için her zaman temel durumdur.
Sıkça Sorulan Sorular
“Ağaç Düğümleri ve Yapısı” dersi ücretsiz mi?
Evet — “Ağaç Düğümleri ve Yapısı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.
“Ağaç Düğümleri ve Yapısı” dersinde ne öğreneceğim?
Bir düğümü işaretçilerle modelleyin. C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Ağaç Düğümleri ve Yapısı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Ağaç Düğümleri ve Yapısı
- BST'ye Ekleme
- Dolaşmalar
- Arama ve Belleği Serbest Bırakma