Tuesday, December 17, 2013

DEFINISI TREE

Dalam ilmu komputer, tree adalah sebuah struktur data yang secara bentuk menyerupai sebuah pohon, yang terdiri dari serangkaian node (simpul) yang saling berhubungan. Node-node tersebut dihubungkan oleh sebuah vektor. Setiap node dapat memiliki 0 atau lebih node anak (child). Sebuah node yang memiliki node anak disebut node induk (parent). Sebuah node anak hanya memiliki satu node induk. Sesuai konvensi ilmu komputer, tree bertumbuh ke bawah, tidak seperti pohon di dunia nyata yang tumbuh ke atas. Dengan demikian node anak akan digambarkan  di bawah node induknya. Node yang berada di pangkal tree disebut node root (akar), sedangkan node yang berada paling ujung pada piramida tree disebut node leaf (daun).

Pohon Biner
Pohon biner adalah sebuah tree yang pada masing-masing simpulnya hanya dapat memiliki maksimum 2 (dua) simpul anak. Tidak boleh lebih. Pada pohon biner, umumnya kedua node anak disebut dengan posisinya, yaitu kiri dan kanan. Beberapa istilah pada pohon biner:

• Size (ukuran): jumlah total node yang terdapat pada pohon biner tersebut.
• Depth (kedalaman): panjang jalur yang menghubungkan sebuah node sampai ke node anaknya yang paling ujung (leaf). Depth biasa juga disebut height.

IMPLEMENTASI TREE

1.   Deklarasi Tree
Karena tree tersusun oleh node-node, maka yang perlu kita deklarasikan adalah komponen node itu sendiri. Dalam contoh dibawah, akan kita namai Node.
Dalam Implementasi ke bahasa pemrograman, maka dibuat Tipe data abstrak (ADT) seperti dibawah ini:





Variabel data yang beritipe integer digunakan untuk menyimpan nilai angka node tersebut, sedangkan kiri dan kanan, merupakan pointer yang masing-masing mewakili vektor yang akan menunjuk ke node anak kiri dan kanan.

2.   Inisialisasi Tree
Asumsi awal dalam membuat tree adalah tidak memiliki cabang atau node, sehingga masih kosong. Oleh karena itu perlu kita tambahkan kode berikut pada baris awal fungsi Main:

pada program dideklarasikan sebuah pointer yang akan menunjuk ke akar pohon yang kita buat, dengan nama *pohon. Pointer ini ditujukan untuk menunjuk struktur bertipe Node, yang telah dibuat pada bagian 1. Karena pohon tersebut sama sekali belum memiliki node, maka pointer *pohon ditunjukkan ke NULL.

3.   Menambahkan Node Pada Tree
Karena pohon yang kita buat merupakan sebuah pohon biner, maka untuk menambahkan sebuah node, secara otomatis penambahan tersebut mengikuti aturan penambahan node pada pohon biner:
  1. Jika pohon kosong, maka node baru ditempatkan sebagai akar pohon.
  2. Jika pohon tidak kosong, maka dimulai dari node akar, dilakukan proses pengecekan berikut:
  3. a.   Jika nilai node baru lebih kecil dari nilai node yang sedang dicek, maka lihat ke kiri node tersebut. Jika kiri node tersebut kosong (belum memiliki kiri), maka node baru menjadi kiri node yang sedang dicek. Seandainya kiri node sudah terisi, lakukan kembali pengecekan a dan b terhadap node kiri tersebut. Pengecekan ini dilakukan seterusnya hingga node baru dapat ditempatkan. 
    b.   Jika nilai node baru lebih besar dari nilai node yang sedang dicek, maka lihat ke kanan node tersebut. Jika kanan node tersebut kosong (belum memiliki kanan), maka node baru menjadi kanan node yang sedang dicek. Seandainya kanan node sudah terisi, lakukan kembali pengecekan a dan b terhadap node kanan tersebut. Pengecekan ini dilakukan seterusnya hingga node baru dapat ditempatkan. 
Proses penambahan ini diimplementasikan secara rekursif pada fungsi berikut:

Variabel **root menunjukkan node mana yang sedang dicek saat ini, untuk itu saat pemanggilan

fungsi ini, variabel **root kita beri nilai pointer yang menunjuk ke node akar, yaitu pohon.

TREE TRAVERSAL

Dalam tree traversal, untuk membaca dan menampilkan seluruh node yang terdapat pada pohon biner, terdapat 3 macam cara, atau yang biasa disebut kunjungan (visit). Semua kunjungan diawali dengan mengunjungi akar pohon. Karena proses kunjungan ini memerlukan perulangan proses yang sama namun untuk depth (kedalaman) yang berbeda, maka ketiganya diimplementasikan dengan fungsi rekursif.

A. Kunjungan Pre-Order
    Merupakan  proses Tree Traversal dengan mengunjungi akar terlebih dahulu sebelum mengunjungi sub           pohon
   
   Kunjungan pre-order dilakukan mulai dari akar pohon, dengan urutan:
    1. Cetak isi (data) node yang sedang dikunjungi
    
    2. Kunjungi kiri node tersebut,
         - Jika kiri tidak kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kiri tersebut.
         - Jika kiri kosong (NULL), lanjut ke langkah ketiga.
    
    3. Kunjungi kanan node tersebut,
         • Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kanan                     tersebut.
         • Jika kanan kosong (NULL), proses untuk node ini selesai, tuntaskan proses yang sama untuk node               yang dikunjungi sebelumnya.
   

B. Kunjungan In-Order.
    Merupakan proses iterasi  Tree Traversal dengan mengunjungi akar disela-sela mengunjungi sub                   pohonnya.
    
    Kunjungan In-Order dilakukan mulai dari akar pohon, dengan urutan:
    1. Kunjungi kiri node tersebut 
         - Jika kiri bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kiri tersebut.
         - Jika kiri kosong (NULL), lanjut ke langkah kedua.

    2. Cetak isi (data) node yang sedang dikunjungi

    3. Kunjungi kanan node tersebut,
        - Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kanan                      tersebut.
        - Jika kanan kosong (NULL), proses untuk node ini selesai, tuntaskan proses yang sama untuk node               yang dikunjungi sebelumnya.

       
C. Kunjungan Post-Order.
     Merupakan proses iterasi  Tree Traversal dengan mengunjungi akar setelah mengunjungi sub pohonnya.
   
      Kunjungan Post-Order dilakukan mulai dari akar pohon, dengan urutan :
    1. Kunjungi kiri node tersebut
        • Jika kiri bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kiri tersebut.
        • Jika kiri kosong (NULL), lanjut ke langkah kedua.

    2. Kunjungi kanan node tersebut
        • Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kanan                     tersebut.
        • Jika kanan kosong (NULL), lanjut ke langkah ketiga.

    3. Cetak isi (data) node yang sedang dikunjungi. Proses untuk node ini selesai, tuntaskan proses yang               sama untuk node yang dikunjungi sebelumnya.


sumber : http://id.wikipedia.org/wiki/Pohon_biner
              Materi Struktur Data Universitas MercuBuana

0 comments:

Post a Comment

please write your comment

Subscribe to RSS Feed Follow me on Twitter!