{"id":38605,"date":"2026-02-03T19:40:40","date_gmt":"2026-02-03T16:40:40","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38605"},"modified":"2026-02-03T19:40:40","modified_gmt":"2026-02-03T16:40:40","slug":"javascript-ile-agac-veri-yapilarini-kesfetmek","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/","title":{"rendered":"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek"},"content":{"rendered":"<p><body><\/p>\n<h2>JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>Bilgisayar bilimlerinde veri yap\u0131lar\u0131, verileri etkili bir \u015fekilde depolamak ve d\u00fczenlemek i\u00e7in temel ara\u00e7lard\u0131r. Bu yap\u0131lar aras\u0131nda a\u011fa\u00e7lar, hiyerar\u015fik ili\u015fkileri modellemek ve karma\u015f\u0131k veri setleri \u00fczerinde h\u0131zl\u0131 operasyonlar ger\u00e7ekle\u015ftirmek i\u00e7in \u00f6zel bir yere sahiptir. Dosya sistemlerinden veritaban\u0131 indekslerine, a\u011f y\u00f6nlendirme algoritmalar\u0131ndan web taray\u0131c\u0131lar\u0131n\u0131n DOM yap\u0131s\u0131na kadar bir\u00e7ok alanda a\u011fa\u00e7 veri yap\u0131lar\u0131 aktif olarak kullan\u0131l\u0131r. JavaScript, dinamik yap\u0131s\u0131 ve geni\u015f kullan\u0131m alan\u0131yla bu soyut kavramlar\u0131 somutla\u015ft\u0131rmak ve uygulamak i\u00e7in m\u00fckemmel bir dil sunar. Bu makalede, a\u011fa\u00e7 veri yap\u0131lar\u0131n\u0131n temellerini, farkl\u0131 t\u00fcrlerini, JavaScript ile nas\u0131l temsil edildiklerini ve \u00fczerinde ger\u00e7ekle\u015ftirilen temel operasyonlar\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Amac\u0131m\u0131z, okuyuculara JavaScript kullanarak a\u011fa\u00e7lar\u0131 derinlemesine anlama ve kendi projelerinde uygulama yetene\u011fi kazand\u0131rmakt\u0131r.<\/p>\n<h2>A\u011fa\u00e7 Veri Yap\u0131lar\u0131na Genel Bak\u0131\u015f<\/h2>\n<h3>Tan\u0131m ve Temel Terminoloji<\/h3>\n<p>Bir a\u011fa\u00e7, d\u00fc\u011f\u00fcmler (nodes) ve kenarlar (edges) k\u00fcmesinden olu\u015fan, d\u00f6ng\u00fc i\u00e7ermeyen, ba\u011flant\u0131l\u0131, hiyerar\u015fik bir veri yap\u0131s\u0131d\u0131r. Ger\u00e7ek hayattaki a\u011fa\u00e7lar\u0131n k\u00f6kten dallara, dallardan yapraklara do\u011fru geni\u015flemesi gibi, veri yap\u0131s\u0131ndaki a\u011fa\u00e7lar da bir &#8220;k\u00f6k&#8221; d\u00fc\u011f\u00fcmden ba\u015flar ve alt d\u00fc\u011f\u00fcmlere do\u011fru dallan\u0131r.<\/p>\n<p>Temel a\u011fa\u00e7 terminolojisi \u015funlar\u0131 i\u00e7erir:<br \/>\n*   <strong>K\u00f6k (Root):<\/strong> A\u011fac\u0131n en \u00fcst\u00fcndeki, hi\u00e7bir ebeveyni olmayan d\u00fc\u011f\u00fcmd\u00fcr. Her a\u011fac\u0131n tek bir k\u00f6k\u00fc vard\u0131r.<br \/>\n*   <strong>D\u00fc\u011f\u00fcm (Node):<\/strong> A\u011fa\u00e7taki her bir elemand\u0131r. Genellikle bir veri de\u011feri ve \u00e7ocuklar\u0131na i\u015faret\u00e7iler i\u00e7erir.<br \/>\n*   <strong>\u00c7ocuk (Child):<\/strong> Bir d\u00fc\u011f\u00fcm\u00fcn do\u011frudan alt\u0131ndaki d\u00fc\u011f\u00fcmlerdir.<br \/>\n*   <strong>Ebeveyn (Parent):<\/strong> Bir d\u00fc\u011f\u00fcm\u00fcn do\u011frudan \u00fcst\u00fcndeki d\u00fc\u011f\u00fcmd\u00fcr.<br \/>\n*   <strong>Karde\u015f (Sibling):<\/strong> Ayn\u0131 ebeveyne sahip d\u00fc\u011f\u00fcmlerdir.<br \/>\n*   <strong>Yaprak (Leaf):<\/strong> Hi\u00e7 \u00e7ocu\u011fu olmayan d\u00fc\u011f\u00fcmlerdir.<br \/>\n*   <strong>Derinlik (Depth):<\/strong> Bir d\u00fc\u011f\u00fcm\u00fcn k\u00f6kten uzakl\u0131\u011f\u0131d\u0131r. K\u00f6k d\u00fc\u011f\u00fcm\u00fcn derinli\u011fi 0&#8217;d\u0131r.<br \/>\n*   <strong>Y\u00fckseklik (Height):<\/strong> Bir a\u011fac\u0131n veya bir d\u00fc\u011f\u00fcm\u00fcn en uzak yapra\u011fa olan mesafesidir. Bir yaprak d\u00fc\u011f\u00fcm\u00fcn y\u00fcksekli\u011fi 0&#8217;d\u0131r. A\u011fac\u0131n y\u00fcksekli\u011fi, k\u00f6k d\u00fc\u011f\u00fcm\u00fcn y\u00fcksekli\u011fidir.<br \/>\n*   <strong>Alt A\u011fa\u00e7 (Subtree):<\/strong> Bir d\u00fc\u011f\u00fcm ve onun t\u00fcm \u00e7ocuklar\u0131, torunlar\u0131 vb. taraf\u0131ndan olu\u015fturulan a\u011fa\u00e7 par\u00e7as\u0131d\u0131r.<br \/>\n*   <strong>Derece (Degree):<\/strong> Bir d\u00fc\u011f\u00fcm\u00fcn sahip oldu\u011fu \u00e7ocuk say\u0131s\u0131d\u0131r.<\/p>\n<h3>Neden A\u011fa\u00e7lar? Kullan\u0131m Alanlar\u0131<\/h3>\n<p>A\u011fa\u00e7lar, belirli kullan\u0131m senaryolar\u0131nda di\u011fer veri yap\u0131lar\u0131ndan (diziler, ba\u011fl\u0131 listeler, hash tablolar\u0131) daha \u00fcst\u00fcn performans ve yap\u0131sal avantajlar sunar:<br \/>\n*   <strong>Hiyerar\u015fik Veri Temsili:<\/strong> Dosya sistemleri (dizinler ve dosyalar), organizasyon \u015femalar\u0131, XML\/HTML belgeleri (DOM) gibi hiyerar\u015fik verileri do\u011fal olarak temsil ederler.<br \/>\n*   <strong>Verimli Arama ve S\u0131ralama:<\/strong> \u0130kili Arama A\u011fa\u00e7lar\u0131 (BST&#8217;ler) gibi \u00f6zel a\u011fa\u00e7 t\u00fcrleri, verimli arama, ekleme ve silme i\u015flemleri i\u00e7in optimize edilmi\u015ftir (ortalama O(log n) zaman karma\u015f\u0131kl\u0131\u011f\u0131).<br \/>\n*   <strong>Veritaban\u0131 \u0130ndeksleme:<\/strong> B-a\u011fa\u00e7lar\u0131 gibi a\u011fa\u00e7 tabanl\u0131 yap\u0131lar, veritabanlar\u0131nda b\u00fcy\u00fck veri setleri \u00fczerinde h\u0131zl\u0131 sorgular i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>A\u011f Y\u00f6nlendirme:<\/strong> A\u011fa\u00e7lar, a\u011f paketlerinin hedeflerine ula\u015fmas\u0131 i\u00e7in en uygun yollar\u0131 belirlemede kullan\u0131l\u0131r.<br \/>\n*   <strong>Karar A\u011fa\u00e7lar\u0131:<\/strong> Makine \u00f6\u011freniminde s\u0131n\u0131fland\u0131rma ve regresyon problemleri i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>S\u00f6zl\u00fckler ve Otomatik Tamamlama:<\/strong> Trie (Prefix Tree) veri yap\u0131s\u0131, s\u00f6zl\u00fck tabanl\u0131 aramalarda ve otomatik tamamlama \u00f6zelliklerinde verimlilik sa\u011flar.<\/p>\n<h2>Temel A\u011fa\u00e7 T\u00fcrleri<\/h2>\n<p>A\u011fa\u00e7lar, yap\u0131lar\u0131na ve d\u00fc\u011f\u00fcm say\u0131lar\u0131na g\u00f6re farkl\u0131 t\u00fcrlere ayr\u0131l\u0131r. Her bir t\u00fcr, belirli bir problemi \u00e7\u00f6zmek i\u00e7in \u00f6zelle\u015fmi\u015ftir.<\/p>\n<h3>Genel A\u011fa\u00e7 (General Tree)<\/h3>\n<p>Genel a\u011fa\u00e7, herhangi bir d\u00fc\u011f\u00fcm\u00fcn s\u0131f\u0131r veya daha fazla \u00e7ocu\u011fa sahip olabilece\u011fi en temel a\u011fa\u00e7 t\u00fcr\u00fcd\u00fcr. \u00c7ocuk d\u00fc\u011f\u00fcmlerin belirli bir s\u0131ralamas\u0131 yoktur.<br \/>\nJavaScript ile temsili:<\/p>\n<pre><code class=\"language-javascript\">class Node {\n    constructor(value) {\n        this.value = value;\n        this.children = []; \/\/ \u00c7ocuklar\u0131 tutan bir dizi\n    }\n}\n\nclass GeneralTree {\n    constructor() {\n        this.root = null;\n    }\n\n    add(value, parentValue = null) {\n        const newNode = new Node(value);\n        if (!this.root) {\n            this.root = newNode;\n            return;\n        }\n\n        if (parentValue === null) {\n            console.warn(\"K\u00f6k d\u00fc\u011f\u00fcm zaten var. Yeni d\u00fc\u011f\u00fcm eklenmedi.\");\n            return;\n        }\n\n        let parentNode = null;\n        \/\/ BFS kullanarak ebeveyn d\u00fc\u011f\u00fcm\u00fc bulma\n        const queue = [this.root];\n        while (queue.length > 0) {\n            const current = queue.shift();\n            if (current.value === parentValue) {\n                parentNode = current;\n                break;\n            }\n            for (const child of current.children) {\n                queue.push(child);\n            }\n        }\n\n        if (parentNode) {\n            parentNode.children.push(newNode);\n        } else {\n            console.error(<code>Ebeveyn d\u00fc\u011f\u00fcm (${parentValue}) bulunamad\u0131.<\/code>);\n        }\n    }\n}<\/code><\/pre>\n<h3>\u0130kili A\u011fa\u00e7 (Binary Tree)<\/h3>\n<p>\u0130kili a\u011fa\u00e7, her d\u00fc\u011f\u00fcm\u00fcn en fazla iki \u00e7ocu\u011fa (sol \u00e7ocuk ve sa\u011f \u00e7ocuk) sahip olabilece\u011fi \u00f6zel bir a\u011fa\u00e7 t\u00fcr\u00fcd\u00fcr. \u00c7ocuklar\u0131n s\u0131ralamas\u0131 \u00f6nemlidir (sol \u00e7ocuk her zaman sa\u011f \u00e7ocuktan \u00f6nce gelir).<\/p>\n<h3>\u0130kili Arama A\u011fac\u0131 (Binary Search Tree &#8211; BST)<\/h3>\n<p>\u0130kili Arama A\u011fac\u0131 (BST), ikili a\u011fac\u0131n \u00f6zel bir halidir ve belirli bir s\u0131ralama kural\u0131na uyar:<br \/>\n*   Bir d\u00fc\u011f\u00fcm\u00fcn sol alt a\u011fac\u0131ndaki t\u00fcm d\u00fc\u011f\u00fcmlerin de\u011ferleri, o d\u00fc\u011f\u00fcm\u00fcn de\u011ferinden k\u00fc\u00e7\u00fckt\u00fcr.<br \/>\n*   Bir d\u00fc\u011f\u00fcm\u00fcn sa\u011f alt a\u011fac\u0131ndaki t\u00fcm d\u00fc\u011f\u00fcmlerin de\u011ferleri, o d\u00fc\u011f\u00fcm\u00fcn de\u011ferinden b\u00fcy\u00fckt\u00fcr.<br \/>\n*   Her iki alt a\u011fa\u00e7 da birer BST&#8217;dir.<\/p>\n<p>Bu \u00f6zellik, arama, ekleme ve silme i\u015flemlerini \u00e7ok verimli hale getirir. Ortalama durumda bu i\u015flemler O(log n) zaman karma\u015f\u0131kl\u0131\u011f\u0131na sahiptir. Ancak, k\u00f6t\u00fc durumda (\u00f6rne\u011fin, s\u0131ral\u0131 bir liste eklenirse), a\u011fa\u00e7 bir ba\u011fl\u0131 listeye d\u00f6n\u00fc\u015febilir ve bu i\u015flemler O(n) zaman alabilir.<\/p>\n<h3>Dengeli \u0130kili Arama A\u011fa\u00e7lar\u0131<\/h3>\n<p>BST&#8217;lerin k\u00f6t\u00fc durum performans\u0131n\u0131 \u00f6nlemek i\u00e7in, AVL a\u011fa\u00e7lar\u0131 ve K\u0131rm\u0131z\u0131-Siyah a\u011fa\u00e7lar gibi &#8220;dengeli&#8221; BST t\u00fcrleri geli\u015ftirilmi\u015ftir. Bu a\u011fa\u00e7lar, ekleme ve silme i\u015flemleri s\u0131ras\u0131nda a\u011fac\u0131n y\u00fcksekli\u011fini minimumda tutmak i\u00e7in otomatik olarak kendini dengeler. Bu sayede t\u00fcm operasyonlar her zaman O(log n) zaman karma\u015f\u0131kl\u0131\u011f\u0131na sahip olur. Bu makalede detaylar\u0131na girmeyece\u011fiz, ancak \u00f6nemli bir konsepttir.<\/p>\n<h3>Heap (Y\u0131\u011f\u0131n)<\/h3>\n<p>Heap, \u00f6zel bir ikili a\u011fa\u00e7 t\u00fcr\u00fcd\u00fcr ve &#8220;heap \u00f6zelli\u011fi&#8221;ni sa\u011flar:<br \/>\n*   <strong>Max-Heap:<\/strong> Her d\u00fc\u011f\u00fcm\u00fcn de\u011feri, \u00e7ocuklar\u0131n\u0131n de\u011ferlerinden daha b\u00fcy\u00fckt\u00fcr (veya e\u015fittir). K\u00f6k, en b\u00fcy\u00fck de\u011feri i\u00e7erir.<br \/>\n*   <strong>Min-Heap:<\/strong> Her d\u00fc\u011f\u00fcm\u00fcn de\u011feri, \u00e7ocuklar\u0131n\u0131n de\u011ferlerinden daha k\u00fc\u00e7\u00fckt\u00fcr (veya e\u015fittir). K\u00f6k, en k\u00fc\u00e7\u00fck de\u011feri i\u00e7erir.<br \/>\nHeap&#8217;ler genellikle \u00f6ncelik kuyruklar\u0131n\u0131 (priority queues) uygulamak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h3>Trie (Prefix Tree &#8211; \u00d6nek A\u011fac\u0131)<\/h3>\n<p>Trie, dizeleri (string) depolamak ve aramak i\u00e7in kullan\u0131lan \u00f6zel bir a\u011fa\u00e7 t\u00fcr\u00fcd\u00fcr. Her d\u00fc\u011f\u00fcm bir karakteri temsil eder ve bir yol, bir kelimeyi veya \u00f6neki olu\u015fturur. \u00d6zellikle otomatik tamamlama, yaz\u0131m denetimi ve s\u00f6zl\u00fck aramalar\u0131 gibi uygulamalarda \u00e7ok etkilidir.<\/p>\n<h2>JavaScript ile A\u011fa\u00e7 Temsili<\/h2>\n<p>A\u011fa\u00e7lar\u0131 JavaScript&#8217;te temsil etmenin en yayg\u0131n yolu, d\u00fc\u011f\u00fcmler i\u00e7in bir s\u0131n\u0131f ve a\u011fac\u0131n kendisi i\u00e7in bir s\u0131n\u0131f olu\u015fturmakt\u0131r.<\/p>\n<h3>D\u00fc\u011f\u00fcm S\u0131n\u0131f\u0131 Olu\u015fturma (\u0130kili A\u011fa\u00e7 \u00d6rne\u011fi)<\/h3>\n<p>\u0130kili a\u011fa\u00e7lar i\u00e7in bir <code>Node<\/code> s\u0131n\u0131f\u0131 genellikle bir de\u011fer ve sol\/sa\u011f \u00e7ocuk i\u015faret\u00e7ilerini i\u00e7erir.<\/p>\n<pre><code class=\"language-javascript\">class Node {\n    constructor(value) {\n        this.value = value;\n        this.left = null; \/\/ Sol \u00e7ocuk\n        this.right = null; \/\/ Sa\u011f \u00e7ocuk\n    }\n}<\/code><\/pre>\n<h3>A\u011fa\u00e7 S\u0131n\u0131f\u0131 Olu\u015fturma (\u0130kili Arama A\u011fac\u0131 \u00d6rne\u011fi)<\/h3>\n<p>Bir <code>BinarySearchTree<\/code> s\u0131n\u0131f\u0131, a\u011fac\u0131n k\u00f6k\u00fcn\u00fc tutar ve ekleme, arama, silme gibi temel operasyonlar\u0131 y\u00f6netir.<\/p>\n<pre><code class=\"language-javascript\">class BinarySearchTree {\n    constructor() {\n        this.root = null;\n    }\n\n    \/\/ Ekleme, arama, silme vb. metodlar buraya gelecek\n}<\/code><\/pre>\n<h2>A\u011fa\u00e7 Ge\u00e7i\u015f Algoritmalar\u0131 (Tree Traversal)<\/h2>\n<p>A\u011fa\u00e7 ge\u00e7i\u015fi, bir a\u011fa\u00e7taki her d\u00fc\u011f\u00fcm\u00fc belirli bir s\u0131raya g\u00f6re ziyaret etme i\u015flemidir. \u0130ki ana kategori vard\u0131r: Derinlik \u00d6ncelikli Arama (DFS) ve Geni\u015flik \u00d6ncelikli Arama (BFS).<\/p>\n<h3>Derinlik \u00d6ncelikli Arama (Depth-First Search &#8211; DFS)<\/h3>\n<p>DFS, bir dal\u0131n sonuna kadar inip, sonra geri d\u00f6nerek di\u011fer dallar\u0131 ke\u015ffeder. \u00dc\u00e7 ana DFS ge\u00e7i\u015f t\u00fcr\u00fc vard\u0131r:<\/p>\n<h4>Pre-order Traversal (\u00d6n-S\u0131ra Ge\u00e7i\u015f)<\/h4>\n<p>S\u0131ra: K\u00f6k -> Sol \u00c7ocuk -> Sa\u011f \u00c7ocuk<br \/>\nKullan\u0131m Alan\u0131: A\u011fac\u0131n bir kopyas\u0131n\u0131 olu\u015fturmak veya a\u011fac\u0131n yap\u0131s\u0131n\u0131 dosya sistemine kaydetmek.<\/p>\n<pre><code class=\"language-javascript\">preOrder(node = this.root) {\n    if (node) {\n        console.log(node.value); \/\/ K\u00f6k\u00fc ziyaret et\n        this.preOrder(node.left); \/\/ Sol alt a\u011fac\u0131 ziyaret et\n        this.preOrder(node.right); \/\/ Sa\u011f alt a\u011fac\u0131 ziyaret et\n    }\n}<\/code><\/pre>\n<p>\u0130teratif versiyon:<\/p>\n<pre><code class=\"language-javascript\">preOrderIterative() {\n    if (!this.root) return;\n    const stack = [this.root];\n    while (stack.length > 0) {\n        const node = stack.pop();\n        console.log(node.value);\n        if (node.right) stack.push(node.right); \/\/ \u00d6nce sa\u011f \u00e7ocu\u011fu it, b\u00f6ylece sol \u00e7ocuk \u00f6nce \u00e7\u0131kar\n        if (node.left) stack.push(node.left);\n    }\n}<\/code><\/pre>\n<h4>In-order Traversal (Orta-S\u0131ra Ge\u00e7i\u015f &#8211; Sadece \u0130kili A\u011fa\u00e7lar \u0130\u00e7in)<\/h4>\n<p>S\u0131ra: Sol \u00c7ocuk -> K\u00f6k -> Sa\u011f \u00c7ocuk<br \/>\nKullan\u0131m Alan\u0131: \u0130kili Arama A\u011fac\u0131ndaki elemanlar\u0131 s\u0131ral\u0131 bir \u015fekilde elde etmek.<\/p>\n<pre><code class=\"language-javascript\">inOrder(node = this.root) {\n    if (node) {\n        this.inOrder(node.left); \/\/ Sol alt a\u011fac\u0131 ziyaret et\n        console.log(node.value); \/\/ K\u00f6k\u00fc ziyaret et\n        this.inOrder(node.right); \/\/ Sa\u011f alt a\u011fac\u0131 ziyaret et\n    }\n}<\/code><\/pre>\n<p>\u0130teratif versiyon:<\/p>\n<pre><code class=\"language-javascript\">inOrderIterative() {\n    if (!this.root) return;\n    const stack = [];\n    let current = this.root;\n    while (current || stack.length > 0) {\n        while (current) {\n            stack.push(current);\n            current = current.left;\n        }\n        current = stack.pop();\n        console.log(current.value);\n        current = current.right;\n    }\n}<\/code><\/pre>\n<h4>Post-order Traversal (Son-S\u0131ra Ge\u00e7i\u015f)<\/h4>\n<p>S\u0131ra: Sol \u00c7ocuk -> Sa\u011f \u00c7ocuk -> K\u00f6k<br \/>\nKullan\u0131m Alan\u0131: Bir a\u011fac\u0131 silmek veya ifade a\u011fa\u00e7lar\u0131n\u0131 de\u011ferlendirmek.<\/p>\n<pre><code class=\"language-javascript\">postOrder(node = this.root) {\n    if (node) {\n        this.postOrder(node.left); \/\/ Sol alt a\u011fac\u0131 ziyaret et\n        this.postOrder(node.right); \/\/ Sa\u011f alt a\u011fac\u0131 ziyaret et\n        console.log(node.value); \/\/ K\u00f6k\u00fc ziyaret et\n    }\n}<\/code><\/pre>\n<p>\u0130teratif versiyon (biraz daha karma\u015f\u0131k):<\/p>\n<pre><code class=\"language-javascript\">postOrderIterative() {\n    if (!this.root) return;\n    const stack1 = [this.root];\n    const stack2 = [];\n    while (stack1.length > 0) {\n        const node = stack1.pop();\n        stack2.push(node);\n        if (node.left) stack1.push(node.left);\n        if (node.right) stack1.push(node.right);\n    }\n    while (stack2.length > 0) {\n        console.log(stack2.pop().value);\n    }\n}<\/code><\/pre>\n<h3>Geni\u015flik \u00d6ncelikli Arama (Breadth-First Search &#8211; BFS)<\/h3>\n<p>BFS, a\u011fac\u0131 seviye seviye ziyaret eder, yani bir seviyedeki t\u00fcm d\u00fc\u011f\u00fcmleri ziyaret ettikten sonra bir sonraki seviyeye ge\u00e7er.<br \/>\nKullan\u0131m Alan\u0131: Bir a\u011fa\u00e7taki en k\u0131sa yolu bulmak, a\u011fac\u0131n seviye seviye yazd\u0131r\u0131lmas\u0131.<\/p>\n<pre><code class=\"language-javascript\">bfs() {\n    if (!this.root) return;\n    const queue = [this.root];\n    while (queue.length > 0) {\n        const node = queue.shift(); \/\/ Kuyruktan ilk eleman\u0131 \u00e7\u0131kar\n        console.log(node.value);\n        if (node.left) queue.push(node.left); \/\/ Sol \u00e7ocu\u011fu ekle\n        if (node.right) queue.push(node.right); \/\/ Sa\u011f \u00e7ocu\u011fu ekle\n    }\n}<\/code><\/pre>\n<h2>\u0130kili Arama A\u011fac\u0131 (BST) Operasyonlar\u0131<\/h2>\n<p>Bir BST&#8217;nin temel operasyonlar\u0131 ekleme, arama ve silmedir. Bu operasyonlar\u0131n verimlili\u011fi, a\u011fac\u0131n dengesine ba\u011fl\u0131d\u0131r.<\/p>\n<h3>Ekleme (Insertion)<\/h3>\n<p>Yeni bir d\u00fc\u011f\u00fcm eklerken, BST kurallar\u0131na uyarak uygun konumu buluruz:<br \/>\n*   K\u00f6k bo\u015fsa, yeni d\u00fc\u011f\u00fcm k\u00f6k olur.<br \/>\n*   Yeni d\u00fc\u011f\u00fcm\u00fcn de\u011feri mevcut d\u00fc\u011f\u00fcm\u00fcn de\u011ferinden k\u00fc\u00e7\u00fckse, sol alt a\u011faca do\u011fru ilerle.<br \/>\n*   Yeni d\u00fc\u011f\u00fcm\u00fcn de\u011feri mevcut d\u00fc\u011f\u00fcm\u00fcn de\u011ferinden b\u00fcy\u00fckse, sa\u011f alt a\u011faca do\u011fru ilerle.<br \/>\n*   Uygun bo\u015f konumu bulana kadar bu i\u015flemi tekrarlay\u0131n.<\/p>\n<pre><code class=\"language-javascript\">insert(value) {\n    const newNode = new Node(value);\n    if (!this.root) {\n        this.root = newNode;\n        return;\n    }\n\n    let current = this.root;\n    while (true) {\n        if (value === current.value) { \/\/ Yinelenen de\u011ferlere izin vermeyebiliriz\n            return undefined;\n        }\n        if (value < current.value) {\n            if (!current.left) {\n                current.left = newNode;\n                return this;\n            }\n            current = current.left;\n        } else { \/\/ value > current.value\n            if (!current.right) {\n                current.right = newNode;\n                return this;\n            }\n            current = current.right;\n        }\n    }\n}<\/code><\/pre>\n<h3>Arama (Search)<\/h3>\n<p>Bir de\u011feri ararken, BST kurallar\u0131n\u0131 kullanarak yolu izleriz:<br \/>\n*   Aranan de\u011fer mevcut d\u00fc\u011f\u00fcm\u00fcn de\u011ferine e\u015fitse, d\u00fc\u011f\u00fcm bulundu.<br \/>\n*   Aranan de\u011fer mevcut d\u00fc\u011f\u00fcm\u00fcn de\u011ferinden k\u00fc\u00e7\u00fckse, sol alt a\u011faca bak.<br \/>\n*   Aranan de\u011fer mevcut d\u00fc\u011f\u00fcm\u00fcn de\u011ferinden b\u00fcy\u00fckse, sa\u011f alt a\u011faca bak.<br \/>\n*   Bo\u015f bir alt a\u011faca ula\u015f\u0131l\u0131rsa ve de\u011fer bulunamazsa, de\u011fer a\u011fa\u00e7ta yoktur.<\/p>\n<pre><code class=\"language-javascript\">find(value) {\n    if (!this.root) return false;\n\n    let current = this.root;\n    let found = false;\n    while (current && !found) {\n        if (value < current.value) {\n            current = current.left;\n        } else if (value > current.value) {\n            current = current.right;\n        } else {\n            found = true;\n        }\n    }\n    return found ? current : undefined;\n}<\/code><\/pre>\n<h3>Silme (Deletion)<\/h3>\n<p>Bir d\u00fc\u011f\u00fcm\u00fc BST&#8217;den silmek, en karma\u015f\u0131k operasyonlardan biridir, \u00e7\u00fcnk\u00fc BST \u00f6zelli\u011fini korumak i\u00e7in \u00fc\u00e7 farkl\u0131 durum ele al\u0131nmal\u0131d\u0131r:<br \/>\n1.  <strong>Yaprak D\u00fc\u011f\u00fcm Silme:<\/strong> D\u00fc\u011f\u00fcm\u00fcn \u00e7ocu\u011fu yoksa, do\u011frudan silinebilir.<br \/>\n2.  <strong>Tek \u00c7ocu\u011fu Olan D\u00fc\u011f\u00fcm Silme:<\/strong> D\u00fc\u011f\u00fcm\u00fcn tek bir \u00e7ocu\u011fu varsa, silinen d\u00fc\u011f\u00fcm\u00fcn yerine \u00e7ocu\u011fu ge\u00e7er.<br \/>\n3.  <strong>\u0130ki \u00c7ocu\u011fu Olan D\u00fc\u011f\u00fcm Silme:<\/strong> Bu en karma\u015f\u0131k durumdur. Silinecek d\u00fc\u011f\u00fcm\u00fcn yerine, sa\u011f alt a\u011fac\u0131ndaki en k\u00fc\u00e7\u00fck d\u00fc\u011f\u00fcm (in-order successor) veya sol alt a\u011fac\u0131ndaki en b\u00fcy\u00fck d\u00fc\u011f\u00fcm (in-order predecessor) ge\u00e7er. Genellikle in-order successor tercih edilir. Bu d\u00fc\u011f\u00fcm bulunur, silinecek d\u00fc\u011f\u00fcm\u00fcn de\u011feriyle de\u011fi\u015ftirilir ve ard\u0131ndan in-order successor kendi orijinal konumundan silinir (bu da yukar\u0131daki durumlardan birine d\u00fc\u015fer).<\/p>\n<p>Silme i\u015flemi, kod olarak olduk\u00e7a uzun ve dikkatli olmay\u0131 gerektirdi\u011finden, burada sadece kavramsal olarak a\u00e7\u0131klayaca\u011f\u0131z. JavaScript&#8217;te bu i\u015flemi do\u011fru bir \u015fekilde uygulamak, d\u00fc\u011f\u00fcm\u00fcn ebeveynine olan referanslar\u0131n\u0131 da do\u011fru bir \u015fekilde g\u00fcncellemek anlam\u0131na gelir.<\/p>\n<h3>Minimum ve Maksimum Bulma<\/h3>\n<p>BST&#8217;de minimum de\u011feri bulmak i\u00e7in k\u00f6kten ba\u015flay\u0131p s\u00fcrekli sol \u00e7ocuklara ilerlenir. Maksimum de\u011feri bulmak i\u00e7in ise s\u00fcrekli sa\u011f \u00e7ocuklara ilerlenir.<\/p>\n<pre><code class=\"language-javascript\">findMin(node = this.root) {\n    if (!node) return null;\n    while (node.left) {\n        node = node.left;\n    }\n    return node.value;\n}\n\nfindMax(node = this.root) {\n    if (!node) return null;\n    while (node.right) {\n        node = node.right;\n    }\n    return node.value;\n}<\/code><\/pre>\n<h2>Ger\u00e7ek D\u00fcnya Uygulamalar\u0131 ve JavaScript<\/h2>\n<p>JavaScript&#8217;in yayg\u0131n kullan\u0131m\u0131 sayesinde, a\u011fa\u00e7 veri yap\u0131lar\u0131 bir\u00e7ok modern web ve uygulama geli\u015ftirme senaryosunda kritik bir rol oynar.<\/p>\n<h3>DOM (Belge Nesne Modeli)<\/h3>\n<p>Bir web taray\u0131c\u0131s\u0131, bir HTML veya XML belgesini ayr\u0131\u015ft\u0131rd\u0131\u011f\u0131nda, onu dahili olarak bir a\u011fa\u00e7 yap\u0131s\u0131 olarak temsil eder: Belge Nesne Modeli (DOM). Her HTML etiketi bir d\u00fc\u011f\u00fcm olur ve i\u00e7 i\u00e7e ge\u00e7mi\u015f etiketler ebeveyn-\u00e7ocuk ili\u015fkilerini olu\u015fturur. JavaScript, DOM API&#8217;leri arac\u0131l\u0131\u011f\u0131yla bu a\u011fa\u00e7 yap\u0131s\u0131n\u0131 manip\u00fcle edebilir: d\u00fc\u011f\u00fcmler ekleyebilir, silebilir, de\u011fi\u015ftirebilir veya arayabiliriz.<br \/>\n\u00d6rne\u011fin: <code>document.getElementById()<\/code>, <code>element.appendChild()<\/code>, <code>element.removeChild()<\/code> gibi i\u015flemler, asl\u0131nda bir a\u011fa\u00e7 \u00fczerinde arama ve manip\u00fclasyon operasyonlar\u0131d\u0131r.<\/p>\n<h3>Dosya Sistemleri<\/h3>\n<p>Bilgisayar\u0131n\u0131zdaki dosya ve dizin yap\u0131s\u0131, k\u00f6k dizinden ba\u015flayan ve alt dizinler ile dosyalara dallanan klasik bir a\u011fa\u00e7 yap\u0131s\u0131d\u0131r. JavaScript&#8217;in Node.js ortam\u0131nda, <code>fs<\/code> mod\u00fcl\u00fc ile dosya sistemini programatik olarak gezebilir ve y\u00f6netebiliriz. Bu, bir a\u011fa\u00e7 ge\u00e7i\u015f algoritmas\u0131 kullanarak belirli bir desene uyan dosyalar\u0131 bulmak veya bir dizin a\u011fac\u0131n\u0131 kopyalamak gibi g\u00f6revlerde kullan\u0131labilir.<\/p>\n<h3>JSON ve XML Ayr\u0131\u015ft\u0131rma<\/h3>\n<p>JSON (JavaScript Object Notation) ve XML, hiyerar\u015fik verileri depolamak ve iletmek i\u00e7in yayg\u0131n formatlard\u0131r. Bu formatlardaki veriler genellikle a\u011fa\u00e7 benzeri bir yap\u0131ya sahiptir. JavaScript&#8217;in <code>JSON.parse()<\/code> fonksiyonu bir JSON dizesini JavaScript nesnesine d\u00f6n\u00fc\u015ft\u00fcr\u00fcrken, bu nesne asl\u0131nda bir a\u011fa\u00e7 yap\u0131s\u0131 olarak d\u00fc\u015f\u00fcn\u00fclebilir. XML ayr\u0131\u015ft\u0131r\u0131c\u0131lar\u0131 da benzer \u015fekilde bir XML belgesini bir DOM a\u011fac\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Bu a\u011fa\u00e7lar \u00fczerinde gezinerek veya sorgulayarak verilere eri\u015filir.<\/p>\n<h3>Y\u00f6nlendirme Algoritmalar\u0131 (Router Trees)<\/h3>\n<p>Tek sayfa uygulamalar\u0131nda (SPA&#8217;lar) kullan\u0131lan istemci taraf\u0131 y\u00f6nlendiriciler (\u00f6rne\u011fin React Router, Vue Router), URL yollar\u0131n\u0131 bir a\u011fa\u00e7 yap\u0131s\u0131 olarak organize edebilir. Her yol segmenti bir d\u00fc\u011f\u00fcm olabilir ve y\u00f6nlendirici, gelen URL&#8217;yi bu a\u011fa\u00e7ta gezerek e\u015fle\u015fen rotay\u0131 bulur. Bu, karma\u015f\u0131k y\u00f6nlendirme mant\u0131klar\u0131n\u0131 verimli bir \u015fekilde y\u00f6netmeyi sa\u011flar.<\/p>\n<h3>Oyun Geli\u015ftirme<\/h3>\n<p>Oyun motorlar\u0131nda sahne grafikleri genellikle bir a\u011fa\u00e7 yap\u0131s\u0131 olarak temsil edilir. Her d\u00fc\u011f\u00fcm bir nesneyi (karakter, \u0131\u015f\u0131k, kamera) veya bir transformasyonu (konum, d\u00f6nd\u00fcrme, \u00f6l\u00e7eklendirme) temsil edebilir. Bu a\u011fa\u00e7lar, nesnelerin d\u00fcnya i\u00e7indeki hiyerar\u015fik ili\u015fkilerini y\u00f6netir ve renderlama, \u00e7arp\u0131\u015fma tespiti gibi i\u015flemleri optimize eder.<\/p>\n<h2>Performans Analizi (Zaman ve Alan Karma\u015f\u0131kl\u0131\u011f\u0131)<\/h2>\n<p>A\u011fa\u00e7 operasyonlar\u0131n\u0131n performans\u0131n\u0131 anlamak, do\u011fru veri yap\u0131s\u0131n\u0131 se\u00e7mek i\u00e7in kritik \u00f6neme sahiptir. Karma\u015f\u0131kl\u0131k genellikle &#8220;B\u00fcy\u00fck O&#8221; notasyonu ile ifade edilir.<\/p>\n<p>*   <strong>Ekleme, Arama, Silme (BST i\u00e7in):<\/strong><br \/>\n    *   <strong>Ortalama Durum:<\/strong> O(log n). A\u011fa\u00e7 dengeliyse, her ad\u0131mda arama alan\u0131 yar\u0131ya iner.<br \/>\n    *   <strong>K\u00f6t\u00fc Durum:<\/strong> O(n). A\u011fa\u00e7 dengesizse (bir ba\u011fl\u0131 liste gibi), her ad\u0131mda sadece bir d\u00fc\u011f\u00fcm elenir.<br \/>\n*   <strong>A\u011fa\u00e7 Ge\u00e7i\u015fleri (DFS, BFS):<\/strong><br \/>\n    *   <strong>Zaman Karma\u015f\u0131kl\u0131\u011f\u0131:<\/strong> O(n), burada n a\u011fa\u00e7taki d\u00fc\u011f\u00fcm say\u0131s\u0131d\u0131r. Her d\u00fc\u011f\u00fcm tam olarak bir kez ziyaret edilir.<br \/>\n    *   <strong>Alan Karma\u015f\u0131kl\u0131\u011f\u0131:<\/strong><br \/>\n        *   DFS (\u00f6zyinelemeli): O(h), burada h a\u011fac\u0131n y\u00fcksekli\u011fidir (\u00e7a\u011fr\u0131 y\u0131\u011f\u0131n\u0131 derinli\u011fi). K\u00f6t\u00fc durumda O(n) olabilir.<br \/>\n        *   BFS (kuyruk kullanarak): O(w), burada w a\u011fa\u00e7taki en geni\u015f seviyedeki d\u00fc\u011f\u00fcm say\u0131s\u0131d\u0131r. K\u00f6t\u00fc durumda O(n) olabilir.<\/p>\n<p>Dengeli a\u011fa\u00e7lar (AVL, K\u0131rm\u0131z\u0131-Siyah), k\u00f6t\u00fc durum senaryolar\u0131n\u0131 ortadan kald\u0131rarak ekleme, arama ve silme operasyonlar\u0131n\u0131n her zaman O(log n) olmas\u0131n\u0131 garanti eder. Bu, b\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken \u00e7ok \u00f6nemlidir.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>A\u011fa\u00e7 veri yap\u0131lar\u0131, bilgisayar bilimlerinin temel ta\u015flar\u0131ndan biridir ve hiyerar\u015fik ili\u015fkileri modellemek, verimli arama ve s\u0131ralama i\u015flemleri ger\u00e7ekle\u015ftirmek i\u00e7in vazge\u00e7ilmezdir. JavaScript, bu soyut yap\u0131lar\u0131 kolayca kodlamak ve anlamak i\u00e7in eri\u015filebilir bir ortam sunar. Bu makalede, genel a\u011fa\u00e7lardan ikili arama a\u011fa\u00e7lar\u0131na kadar \u00e7e\u015fitli a\u011fa\u00e7 t\u00fcrlerini inceledik, JavaScript ile nas\u0131l temsil edildiklerini g\u00f6sterdik ve \u00fczerinde ger\u00e7ekle\u015ftirilen temel ge\u00e7i\u015f ve manip\u00fclasyon algoritmalar\u0131n\u0131 detayland\u0131rd\u0131k.<\/p>\n<p>DOM manip\u00fclasyonundan dosya sistemlerine, JSON ayr\u0131\u015ft\u0131rmadan oyun geli\u015ftirmeye kadar bir\u00e7ok ger\u00e7ek d\u00fcnya uygulamas\u0131nda a\u011fa\u00e7lar\u0131n g\u00fcc\u00fc ve esnekli\u011fi, geli\u015ftiricilerin karma\u015f\u0131k problemleri zarif ve verimli \u00e7\u00f6z\u00fcmlerle ele almalar\u0131n\u0131 sa\u011flar. A\u011fa\u00e7lar\u0131n zaman ve alan karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 anlamak, performans a\u00e7\u0131s\u0131ndan kritik uygulamalar geli\u015ftirirken do\u011fru veri yap\u0131s\u0131n\u0131 se\u00e7mek i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<p>A\u011fa\u00e7lar d\u00fcnyas\u0131 olduk\u00e7a geni\u015ftir; bu makale sadece bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. AVL a\u011fa\u00e7lar\u0131, K\u0131rm\u0131z\u0131-Siyah a\u011fa\u00e7lar, B-a\u011fa\u00e7lar\u0131, Heap&#8217;ler ve Trie&#8217;ler gibi daha geli\u015fmi\u015f a\u011fa\u00e7 t\u00fcrlerini ke\u015ffetmek, veri yap\u0131lar\u0131 bilginizi daha da derinle\u015ftirecektir. JavaScript ile pratik yaparak ve bu kavramlar\u0131 kendi projelerinize uygulayarak, algoritmik d\u00fc\u015f\u00fcnme becerilerinizi geli\u015ftirecek ve daha sa\u011flam, \u00f6l\u00e7eklenebilir yaz\u0131l\u0131mlar tasarlayabileceksiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek\nGiri\u015f\nBilgisayar bilimlerinde veri yap\u0131lar\u0131, verileri etkili bir \u015fekilde depolamak ve d\u00fczenl","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[129],"tags":[],"class_list":{"0":"post-38605","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-javascript","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek\" \/>\n<meta property=\"og:description\" content=\"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek Giri\u015f Bilgisayar bilimlerinde veri yap\u0131lar\u0131, verileri etkili bir \u015fekilde depolamak ve d\u00fczenl\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-03T16:40:40+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek\",\"datePublished\":\"2026-02-03T16:40:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/\"},\"wordCount\":2788,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Javascript\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/\",\"name\":\"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-03T16:40:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/","og_locale":"tr_TR","og_type":"article","og_title":"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek","og_description":"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek Giri\u015f Bilgisayar bilimlerinde veri yap\u0131lar\u0131, verileri etkili bir \u015fekilde depolamak ve d\u00fczenl","og_url":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-03T16:40:40+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek","datePublished":"2026-02-03T16:40:40+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/"},"wordCount":2788,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Javascript"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/","url":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/","name":"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-03T16:40:40+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-agac-veri-yapilarini-kesfetmek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JavaScript ile A\u011fa\u00e7 Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=38605"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38605\/revisions"}],"predecessor-version":[{"id":38606,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38605\/revisions\/38606"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38605"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38605"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}