Tree Structure Algorithm

JS ALGORITHMS

Ağaç(Tree) Yapısı Oluşturma

Uygulama yazarken zaman zaman ağaç yapısına ihtiyac duyarız. Bu yazıda nasıl bir ağaç yapısını oluşturacağımızı kısaca anlatmaya çalışacağım.

--

Tree Structure dediğimizde gerçekten de doğadaki ağaca benzer bir yapı,

  • nasıl bir kökten çıkmış gövde
  • bu gövdeden çıkan dallar,
  • bu dallardan çıkan yeni dallar veya yapraklar varsa;

Bilgisayar alanındaki ağaç yapısıda buna benzerdir.

Ağaç ve Ağaç Yapısı

Peki bizim bu yapılara nerede ihtiyacımız oluyor ? . Bir çok yerde. Örneğin geçen geliştirdiğim bir örnekte GitHub Repo göstermek istediğimizde ağaç yapısını bir hiyerarşi şeklinde değilde liste şeklinde GitHub apisinden alıyoruz.

Bu listeyi aşağıdaki kırmızı ok ile gösterdiğim kısımda görebilirsiniz. Bu listeyi kullanarak ağaç yapısını oluşturarak bu yapıyı daha kullanışlı hale getirebiliriz.

Github API’sinden dönen Dosya Listesi..

Bunun için yapmamız gereken aşağıda / ayrılan klasör yapısına göre ağaç yapısını oluşturan algoritmayı yazmak.

arduino
arduino/eg
arduino/eg/board.js

Bu algoritmayı çalıştırdığımızda görselimiz daha aşağıdaki şekilde hiyerarşik bir yapıya dönüşecek ve daha kullanışlı hale dönüşecektir.

Dosya Listesini Hiyerarşik Yapıya dönüştürdüğümüz Hali

Her fonksiyon/algoritma aslında temel olarak f(x)=y yani bir girdi(input) alır ve bu girdiyi işleyerek size bir çıktı(output) oluşturur.

Input and Algorithm

Şimdi sıra geldi algoritmamızı nasıl yazacağımız konusuna.. Öncelikle yukarıdaki resimdeki ağaç görselindekine benzer bir yapıya ihtiyacımız var.

Tree Node..

Bu yapıda ağaç düğümleri kullanacağız. Bir ağaç düğümünü tanımlayan 3 eleman bulunuyor.

  • id : unique identifier (tekil tanımlayıcı)
  • name: düğümün adı
  • children: çocuk düğümleri tutan yapı

Yapımızı oluşturduğumuza göre Algoritmamızı tanımlayabiliriz;

Algoritma
  • Kırmızı kısımda: Kök düğüm objesini statik olarak oluşturuyoruz
  • Mavi kısımda: Tüm elemanları dönüp / yapısına göre pathItems array oluşturup, son elemanı belirliyoruz.
  • Yeşil kısımda :İlgili elemanın ata düğümünü bulup buna çocuk olarak ekliyoruz. Burda GitHub API’den gelen listenin ata ve sonra çocukları olacak şekilde sıralı geldiğini biliyoruz. (Not: for.each döngüsünde önce parent düğümler eklenmiş durumda oluyor)

Buraya kadar tamam tek işimiz findParentNodeAndAdd fonksiyonunu yazmak. Bu fonksiyonun recursive olması gerekiyor. Çünkü aradığımız ata root(kök) düğümünün x level altındaki bir düğüm olabilir.

findParentNodeAndAdd Algoritması

Kaynak

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--