MAKALAH STRUKTUR DATA
DISUSUN OLEH:
SUKMA LARAS SATI F 551 16 056
TEKNIK INFORMATIKA
BAB I PENDAHULUAN 1.1. Latar Belakang
Salah satu penerapan teori pohon yang paling berguna dan dipakai yaitu konsep binary search tree dimana konsep ini memberikan struktur data yang memudahkan operasi pencarian, penambahan, dan penghapusan terhadap data. Operasi tersebut lebih efisien dan jauh lebih baik pada konsep ini dibanding sequential search pada senarai berkait dalam waktu eksekusi / run-time.Dari konsep binary search tree ini dikembangkan lagi suatu struktur penyimpanan data yang merupakan modifikasi dari binary search tree tersebut yaitu AVL-Tree dan Splay Tree yang masing-masing mempunyai keunggulan pada kasus tertentu yang sekarang ini sering dijumpai.AVL-Tree merupakan modifikasi binary search tree yang tinggi setiap upapohon kiri dan upapohon kanan sama atau setidaknya selisih antara keduanya tidak lebih dari 1. Keunggulan dari AVL-Tree antara lain untuk mengoptimasi pencarian data terutama untuk kasus pohon yang condong ke kiri atau ke kanan sehingga pencarian akan jauh lebih mudah apabila pohon tersebut seimbang. Kasus pohon yang condong ke kiri atau kanan itu mungkin saja terjadi terutama apabila penambahan elemen dan penghapusan elemen dilakukan terus-menerus dan tidak dapat diketahui urutannya.Sedangkan Splay-Tree justru kebalikan dari AVL-Tree yang tidak mempermasalahkan kecondongan upapohonnya namun setiap kali data diakses maka simpul dari data yang diakses tersebut akan dinaikkan keatas mendekati akar pohon. Data yang sering diakses / aktif akan berada dekat pada akar pohon sehingga data tersebut mudah Dengan demikian dapat disimpulkan bahwa penerapan teori pohon sangatlah bermanfaat dalam kajian struktur data.
1.2. Rumusan Masalah
1.Bagaimana cara mencari data secara cepat pada sebuah data yang berkait?
2.Bagaimana cara mencari data secara cepat pada data kontigue ? 3.Bagaimana cara mencari data pada tabel kontigu?
4.Bagaimana cara melakukan operasi penambahan dan penghapusan pada elemen senarai yang cepat?
1.3. Tujuan
1. Mempelajari variasi bagian-bagian dari tree sebagai suatu bentuk struktur tak linier 2. Mempelajari beberapa hubungan fakta yang direpresentasikan dalam sebuah tree, sehingga mampu merepresentasikan tree dalam permasalahan aslinya 3. Memahami bagaimana menulis program untuk tree, dan bagaimana mengartikannya
kembali dalam bentuk permasalahan aslinya.
4. Mengimplementasikan struktur data Binary Tree menggunakan linked list.
BAB II
LANDASAN TEORI 2.1. Teori Pohon
Teori pohon merupakan salah satu teori yang cukup tua karena sudah dikenal sejak tahun 1857, dimana ketika itu matematikawan Inggris Arthur Cayley menggunakan teori pohon ini untuk menghitung jumlah senyawa kimia. Teori pohon ini sebenarnya adalah suatu mekanisme penyelesaian suatu masalah dengan menganalogikan permasalahan tersebut kedalam struktur pohon untuk memudahkan pencarian solusi masalah tersebut. Teori pohon ini juga merupakan salah satu penerapan konsep graf. Dimana pohon itu dapat didefinisikan sebagai graf tak-berarah terhubung yang tidak mengandung sirkuit. Kajian struktur data merupakan kajian yang sangat penting dalam bidang informatika. Dan di zaman sekarang ini yang teknologinya semakin berkembang, dibutuhkan struktur data yang efisien yang dapat meningkatkan kinerja program.Teori pohon ini merupakan teori yang sangat berguna dalam struktur data dimana aplikasiaplikasi dari teori pohon ini dapat dijadikan struktur penyimpanan data yang sangat baik dalam kasus tertentu yang mana kasus tersebut sudah umum ditemui sekarang ini. Oleh karena itu dalam makalah ini akan dijelaskan beberapa aplikasi teori pohon yang dipakai untuk
membentuk suatu struktur penyimpanan data yang efisien.
2.2. Binary Tree Sebuah binary tree adalah sebuah pengorganisasian secara hirarki dari beberapa buah simpul, dimana masing-masing simpul tidak mempunyai anak lebih dari 2. Simpul yang berada di bawah sebuah simpul dinamakan anak (child) dari simpul tersebut. Simpul yang berada di atas sebuah simpul dinamakan induk (parent) dari simpul tersebut.Masing-masing simpul dalam binary tree terdiri dari tiga bagian : sebuah data dan dua buah pointer yang dinamakan pointer kiri(left) dan kanan(right). Dengan menggunakan tiga bagian ini, kita menampilkan sebuah binary tree dengan melakukan setting pada pointer kiri dan kanan untuk menghubungkan sebuah simpul dengan anak-anaknya. Jika sebuah simpul tidak mempunyai anak pada pointer kiri atau kanan, kita melakukan setting pada pointer tersebut pada NULL, yang menunjukkan akhir dari percabangan adalah pada simpul tersebut. Sebuah percabangan adalah kumpulan dari simpul-simpul yang dimulai dari sebuah root dan diakhiri dengan sebuah simpul terakhir. Simpul terakhir (daun) adalah simpul dari tree yang tidak mempunyai anak.
BAB III
PEMBAHASAN
Dalam struktur data, pohon memegang peranan yang cukup penting. Struktur ini biasanya digunakan terutama untuk menyajikan data yang mengandung hubungan hirarkikal antara elemen-elemen mereka. Kita lihat misalnya, data pada record, keluarga dari pohon, ataupun isi dari tabel. Mereka mempunyai hubungan hirarkikal.
Bentuk pohon berakar yang khusus, yang lebih mudah kita kelola dalam komputer adalah pohon binar (binary tree). Bentuk pohon berakar yang umum, kita kenal sebagai “pohon umum” atau
“general tree.”Sebuah pohon binar T didefinisikan terdiri atas sebuah himpunan hingga elemen yang disebut simpul (node), sedemikian sehingga :
(a) T adalah hampa (disebut pohon null) atau;
(b) T mengandung simpul R yang dipilih (dibedakan dari yang lain), disebut “akar” atau “root”
dari T, dan simpul sisanya membentuk 2 pohon binar (subpohon kiri dan subpohon kanan dari akar R) T1 dan T2 yang saling lepas.
Perhatikan bahwa pendefinisian pohon binar di atas adalah rekursif. Jika T1 tidak hampa, maka simpul akarnya disebut suksesor kiri dari R. Hal serupa untuk akar dari T2 (tidak hampa) disebut suksesor kanan dari R.Pohon binar acapkali disajikan dalam bentuk diagram.
Perhatikan contoh Pohon binar pada Gambar 7.2 berikut.
Pohon binar tersebut mempunyai 11 simpul yang diberi label huruf A sampai L (tak termasuk I).
Simpul akar adalah simpul yang digambar pada bagian paling atas. Untuk mengambarkan suksesor kiri serta suksesor kanan, dibuat garis ke kiri bawah dan ke kanan bawah. Perhatikan pada Gambar tersebut bahwa B adalah suksesor kiri dari A, sedangkan C adalah suksesor kanan dari A. Subpohon kiri dari A mengandung simpul-simpul B, D, E dan F, sedangkan subpohon kanannya mengandung simpul-simpul C, G, H, J, K dan L.Kita dapat melihat bahwa jika N adalah sebarang simpul dari pohon binar T, maka N mempunyai 0, 1 atau 2 buah suksesor.
Suksesor kerap kali disebut anak atau anak lelaki (child atau son). Jadi simpul N tersebut boleh kita sebut ayah atau orang-tua (father atau parent) dari suksesornya.Pada contoh kita, Simpul A, B, C dan H mempunyai 2 anak, simpul E dan J mempunyai satu anak.
Sementara itu simpul-simpul D, F, G, L dan K tidak mempunyai satu anakpun. Simpul yang tidak mempunyai anak disebut “daun” atau “terminal.”
3.1. Struktur Data Tree
Dalam bab ini kita akan mempelajari satu bentuk struktur data tak linier yang mempunyai sifat- sifat khusus, yang dinamakan pohon (tree). Struktur ini biasanya digunakan untuk menggambarkan hubungan yang bersifat hirarkis antara elemen-elemen yang ada. Silsilah keluarga, hasil pertandingan yang berbentuk turnamen, atau struktur organisasi dari sebuah perusahaan adalah contoh dalam organisasi tree. Dalam pemrograman, sebuah pohon terdiri dari elemen-elemen yang dinamakan node(simpul) yang mana hubungan antar simpul bersifat hirarki.
Simpul yang paling atas dari hirarki dinamakan root. Simpul yang berada di bawah root secara langsung, dinamakan anak dari root, yang mana biasanya juga mempunyai anak di bawahnya.
Sehingga biasa disimpulkan, kecuali root, masing-masing simpul dalam hirarki mempunyai satu induk (parent).
Jumlah anak sebuah simpul induk sangat bergantung pada jenis dari pohon. Jumlah anak dari simpul induk ini dinamakan faktor percabangan. Pada bab ini pembahasan difokuskan pada binary tree, yaitu pohon yang mempunyai factor percabangan 2.
1. Deskripsi dari Binary Tree
Sebuah binary tree adalah sebuah pengorganisasian secara hirarki dari beberapa buah simpul, dimana masing-masing simpul tidak mempunyai anak lebih dari 2. Simpul yang berada di bawah sebuah simpul dinamakan anak dari simpul tersebut. Simpul yang berada di atas sebuah simpul dinamakan induk dari simpul tersebut.
Masing-masing simpul dalam binary tree terdiri dari tiga bagian : sebuah data dan dua buah pointer yang dinamakan pointer kiri dan kanan. Dengan menggunakan tiga bagian ini, kita menampilkan sebuah binary tree dengan melakukan setting pada pointer kiri dan kanan untuk menghubungkan sebuah simpul dengan anak-anaknya. Jika sebuah simpul tidak mempunyai anak pada pointer kiri atau kanan, kita melakukan setting pada pointer tersebut pada NULL, yang menunjukkan akhir dari percabangan adalah pada simpul tersebut.
Sebuah percabangan adalah kumpulan dari simpul-simpul yang dimulai dari sebuah root dan diakhiri dengan sebuah simpul terakhir. Simpul terakhir adalah simpul dari tree yang tidak mempunyai anak. Kadang-kadang ketika kita bekerja dengan beberapa pohon dalam satu waktu, maka pohon-pohon tersebut dinamakan sebua hutan.
2. Istilah-Istilah Dasar
Simpul juga mempunyai sibling, descendants, dan ancestors. Sibling dari sebuah simpul adalah anak lain dari induk simpul tersebut. Descendants dari sebuah simpul adalah semua simpul- simpul merupakan cabang (berada di bawah) simpul tersebut.
Anchestors dari sebuah simpul adalah semua simpul yang berada di atas antara simpul tersebut dengan root. Penampilan dari sebuah tree akan ditampilkan dengan berat dari tree tersebut, angka yang menunjukkan jumlah level yang ada di dalamnya.
Tingkat suatu simpul ditentukan dengan pertama kali menentukan akar sebagai bertingkat 1. Jika suatu simpul dinyatakan sebagai tingkat N, maka simpul-simpul yang merupakan anaknya akan berada pada tingkatan N + 1.
Tinggi atau kedalaman dari suatu pohon adalah tingkat maksimum dari simpul dalam pohon dikurangi dengan 1. Selain tingkat, juga dikenal istilah derajad (degree) dari suatu simpul.
Derajad suatu simpul dinyatakan sebagai banyaknya anak atau turunan dari simpul tersebut.
Gambar: Ilustrasi Sebuah Pohon Biner dengan Kedalaman 3 3. Penyajian Pohon Biner
Implementasi pohon biner dalam pemrograman dapat dilakukan dengan beberapa cara. Cara pertama adalah dengan menggunakan link list dan cara lain adalah dengan menggunakan cara berurutan. Dalam bab ini kita lebih banyak mempelajari cara implementasi biner menggunakan link list.
4. Deklarasi Pohon
Jika kita memperhatikan setiap simpul dalam pohon biner, kita bisa menyusun struktur data yang tepat dari simpul-simpul tersebut. Kita dapat melihat bahwa dalam setiap simpul selalu berisi dua buah pointer untuk menunjuk ke cabang kiri dan cabang kanan, dan informasi yang akan disimpan dalam simpul tersebut. Dengan memperhatikan hal ini, simpul dalam pohon biner disajikan sebagai berikut:
Gambar Simpul Pada Pohon Biner
Sesuai dengan gambar tersebut, maka deklarasi list yang sesuai adalah:
typedef char TypeInfo;
typedef struct Simpul *Tree;
struct Simpul { TypeInfo Info;
tree Kiri, /* cabang kiri */
Kanan; /* cabang kanan */
};
Program Deklarasi dari Tree
3.2. Implementasi Binary Tree dengan Linked List
Salah satu implementasi dari binary tree adalah Binary Search Tree (BST), dimana BST merupakan sekumpulan elemen yang bernilai unik, dan untuk setiap node X dalam struktur BST Nilai elemen pada sub pohon kiri (left subtree) pasti memiliki nilai yang lebih kecil dari X dan nilai elemen pada sub poon kanan(right sub tree) pasti memiliki nilai yang labih besar.
BST dapat disajikan dengan beberapa cara. Dalam praktikum ini akan menggunakan linked list untuk implementasi Binary Search Tree. Linked list yang dipakai adalah double linked list non circular.
Gambar Penyajian Binary Tree dengan Double Linked List
Berikut penjelasan detail mengenai implementasi Binary Search Tree dengan linked list:
Terdapat setidaknya 8 operasi yakni, insert, findMin, findMax, find, remove, preOrder, inOrder, postOrder.
Proses insert dilakukan dengan mengikuti aturan sbb:
Setiap node baru akan menempati posisi sebagai daun (leaf).
Untuk insert kedalam BST dimulai dari root, jika data lebih kecil dari root, node baru harus di masukkan ke dalam left sub tree. Jika data pada node baru lebih besar dari root, node baru harus di masukkan ke dalam right sub tree.
Gunakan rekursif.
Operasi findMin akan mencari nilai terkecil dari node yang ada di dalam BST dengan cara menelusuri left subtree sampai ke daun. (gunakan rekursif).
Operasi findMax akan mencari nilai terbesar dari node yang ada di dalam BST dengan cara menelusuri right subtree sampai ke daun. (gunakan rekursif).
Operasi find akan mencari nilai yang dicari dengan membandingkan dengan data pada root. Jika lebih kecil akan mencari di left sub tree, dan jika lebih besar cari di right sub tree. (gunakan rekursif).
Operasi remove dilakukan dengan mengikuti aturan sbb:
Jika node yang dihapus berposisi sebagai daun, dengan sederhana bisa dihapus.
Jika node memiliki satu anak, maka anak tersebut akan menggantikan posisi node yang dihapus.
Jika node memiliki 2 anak [pilih salah satu]:
§ Ganti node yang dihapus dengan node terkecil pada right sub tree.
§ Ganti node yang dihapus dengan node terbesar pada left sub tree.
Setiap elemen/node dari BST mempunyai 3 bagian yaitu bagian data yang bernilai dengan data, bagian left untuk menunjuk ke left subtree dan bagian right untuk menunjuk ke right sub tree.
Dalam hal, ini setiap data dalam node bersifat unik/beda.
3.3. Inisialisasi Tree
Untuk pertama kali, saat kita akan membuat sebuah pohon biner, asumsi awal adalah pohon itu belum bertumbuh, belum memiliki node sama sekali, sehingga masih kosong. Oleh karena itu perlu kita tambahkan kode berikut pada baris awal fungsi Main:
Kita mendeklarasikan 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.4. 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:
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.
c.
3.5. Membaca dan Menampilkan Node Pada Tree
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.
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 bukan 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.
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.
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.6. Membuat Pohon Biner
Tabel Program Deklarasi dan Tree memperlihatkan bagaimana proses pembentukan pohon biner dari sebuah persamaan.
Tabel Pembentukan Pohon Biner dari persamaan: (A+B)*((B-C)+D) Jenis-Jenis Binary Tree
1. Complete Binary Tree
Suatu binary tree T akan disebut complete/lengkap jika semua levelnya memiliki child 2 buah kecuali untuk level paling akhir. Tetapi pada akhir level setiap leaf/daun muncul terurut dari sebelah kiri.
Contoh:
Sebuah binary tree yang lengkap dapat diberi label dengan sebuah bilangan bulat dari posisi kiri ke kanan. Dengan pemberian label ini, seseorang dapat dengan mudah menentukan child dan parent dari sebuah node/simpul K dalam sebuah complete tree Tn. Khususnya, left child (anak kiri) dari simpul K dapat diketahui dengan rumus 2 * K, dan right child (anak kanan) dari simpul K dapat diketahui dengan rumus 2 * K+1. Perhatikan di gambar bahwa simpul 5 mempunyai anak 10 (dari 2 * 5) dan 11 (dari 2
* 5 + 1).
Sedangkan untuk mencari parent, rumusnya adalah K / 2 sehingga ketika simpul 6 yang diperiksa, itu berarti bahwa parent dari simpul 6 adalah 6 / 2 = 3.
 Pembuatan Binary Tree
Pembuatan binary tree lebih mudah menggunakan binary search tree (binary sorted tree) dengan cara : “ Jika nilai dari simpul yang akan disisipkan lebih besar dari simpul parent, maka simpul tersebut ditempatkan sebagai subtree kanan. Jika lebih kecil maka simpul baru tersebut disimpan sebagai subtree kiri”.
Contoh :
Tree yang akan dibuat adalah : HAKCBLJ
• H dijadikan sebagai root
• A < H : A menjadi subtree kiri H
• K > H : K menjadi subtree kanan H
• C < H Æ C > A : C menjadi subtree
kanan dari A.
• B < H Æ B > A Æ B < C : B menjadi subtree kiri dari C.
• L > H Æ L > K : L menjadi subtree kanan dari K.
• J < H Æ J < K : J menjadi subtree kiri dari K.
 Penelusuran Binary Tree (Traversing Binary Tree)
Ada tiga cara yang standar untuk menelususi sebuah binary tree yaitu : 1. Preorder (Node – Left – Right [NLR])
ƒ Proses root
ƒ Telusuri subtree kiri (Left) secara preorder ƒ Telusuri subtree kanan (Right) secara preorder 2. Inorder (Left – Node – Right [LNR])
ƒ Telusuri subtree kiri (Left) secara inorder ƒ Proses root
ƒ Telusuri subtree kanan (Right) secara inorder 3. Postorder (Left – Right – Node [LNR]) ƒ Telusuri subtree kiri (Left) secara postorder ƒ Telusuri subtree kanan (Right) secara postorder
ƒ Proses root
Contoh :
1.
NOTASI PREFIX, INFIX DAN POSTFIX SERTA
TRAVERSAL
Akan kita lihat bagaimana struktur
pohon dipakai untuk menempatkan data, guna memudahkan pekerjaan cari (search). Pohon juga berguna untuk menyajikan koleksi data yang mempunyai struktur logik bercabang.
Sebagai contoh, perhatikan pohon binar pada Gambar 7.22 dan 7.23 yang menya-jikan ekspresi aritmetika (c+d)*e dan ((a+b)*(c/d)+(e^f))/g. Pada penyajian ini, masing-masing simpul yang bukan daun, mewakili operator, sedangkan subpohon kiri, dan kanannya merupakan operand.
Contoh pohon pada Gambar 7.24 menyajikan koleksi elemen data yang disusun sedemikian rupa, yakni bila K adalah label/ nama suatu simpul, maka label dari semua simpul subpohon kirinya lebih kecil atau sama dengan K (secara alfabetik), dan label semua simpul subpohon kanannya lebih besar dari K.
Proses kunjungan dalam pohon, dengan setiap simpul hanya dikunjungi tepat satu kali disebut traversal. Ketika dilakukan traversal pohon, koleksi simpul dari pohon terlihat satu persatu.
Hasil dari traversal pohon adalah suatu untai simpul pohon yang urut secara linear. Suatu simpul dikatakan dikunjungi, bila simpul tersebut kita masuk-kan ke dalam urutan linear tersebut.
Tiga kegiatan yang terdapat dalam traversal pohon binar adalah : (1) mengunjungi simpul akar (root)
(2) melakukan traversal subpohon kiri dan (3) melakukan traversal subpohon kanan.
Kita mengenal tiga macam traversal pohon, yang berbeda satu dengan yang lain dari cara pengurutan ketiga kegiatan di atas. Ketiga traversal tersebut adalah traversal pre- order, in- order dan post-order. Pada traversal pre-order dilakukan berturut-turut :
(1) Kunjungi simpul akar
(2) Lakukan traversal subpohon kiri secara pre-order (3) Lakukan traversal subpohon kanan secara pre-order
Perhatikan bahwa proses berlangsung secara rekursif. Kalau kita lakukan traversal pre- order terhadap pohon pada Gambar 7.22, 7.23 dan 7.24 maka berturut-turut diperoleh deretan urutan linear
Gambar 7.22 : c * d + e
Gambar 7.23 : a / b + c * d + e / f ^ g Gambar 7.24 : M E B A D L P N V T Z
Untuk jelasnya perhatikan Gambar 7.25, 7.26 dan 7.27 dengan arah dari traversal dinyatakan dengan garis putus-putus).:
Traversal in-order berbeda urutannya, yakni : (1) Lakukan traversal subpohon kiri secara in-order
(2) Kunjungi simpul akar
(3) Lakukan traversal subpohon kanan secara in-order
Kalau kita lakukan traversal in-order terhadap pohon pada Gambar 7.22, 7.23 dan 7.24 maka diperoleh deretan urutan linear, berturut-turut :
Gambar 7.22 : (c + d) * e
Gambar 7.23 : ((a + b) * (c / d) + (e ^ f)) / g
Gambar 7.24 : A B D E L M N P T V Z
Gambar 7-28(a) menggambarkan traversal secara in-order pada pohon di Gambar 7.22. Sisanya dapat anda coba sendiri.
2. Tanda Kurung pada Notasi Infix
Lihat kembali gambar 7.28(a) di atas, kunjungan secara in-order pada pohon tersebut seharusnya menghasilkan : c + d * e. Akan tetapi, hal itu akan berbeda hasilnya jika operand- operand aritmetika tersebut kita beri nilai. Contoh, c kita beri nilai 2, b = 3 dan e= 4. Maka hasil perhitungan 2 + 3 * 4 adalah 14. Padahal seharusnya (2 + 3) * 4 = 20.
Mari kita lakukan langkah-langkah pembuatan pohon binar (1) c + d * e dan (2) (c + d) * e.
Apakah kedua notasi tersebut akan memiliki struktur pohon yang sama ? Kita mulai dengan pohon binar (1).
c + d * e; maka operasi yang akan dilakukan pertama kali adalah d * e (sesuai kaidah derajat operasi matematika). Bila d * e kita anggap sebagai f, maka notasi semula bisa disederhanakan menjadi c + f.
c + f; struktur pohonnya adalah :
Kita ketahui bahwa f adalah d * e yang struktur pohonnya adalah :
Kita ganti f di atas menjadi d * e, sehingga hasil akhirnya menjadi :
Sekarang, kita kerjakan pohon kedua (c + d) * e. Operasi yang pertama kali dilakukan adalah (c + d). Jika (c + d) kita misalkan f, maka ekspresinya akan menjadi f * e.
f * e akan digambarkan sebagai :
Kita tahu bahwa f adalah (c + d) yang struktur pohonnya adalah :
Maka, ketika kita masukkan ke posisi sebenarnya, struktur pohon akhirnya adalah :
Bisa Anda lihat, bahwa kedua pohon di atas berbeda strukturnya. Hal yang rumit adalah menuliskan notasi infix ketimbang prefix dan postfix karena pada notasi infix harus memperhatikan tanda kurung, sedang yang lain tidak memerlukannya. Tanda kurung itu digunakan untuk “mengurungi” setiap substree yang ada.
Perhatikan kembali Gambar 7.23 di atas. Notasi yang dihasilkan adalah :
Substree paling kiri : (a + b) Substree di sebelahnya : (c / d) Digabung menjadi (a + b) * (c / d) Substree berikutnya : ( e ^ f)
Digabung lagi menjadi ( (a + b) * (c / d) ) * (e ^ f)
Digabung keseluruhannya menjadi : ( ( (a + b) * (c / d) ) * (e ^ f) ) / g
Operasi itu akan menghasilkan nilai yang berbeda jika tidak digunakan tanda kurung : a + b * c / d * e ^ f / g.
Traversal yang ketiga, yakni traversal post-order memakai urutan : (1) Lakukan traversal subpohon kiri secara post-order
(2) Lakukan traversal subpohon kanan secara post-order
(3) Kunjungi simpul akar. Traversal post-order terhadap Pohon pada Gambar 7-22, 7-23 dan 7- 24 menghasilkan: Gambar 7.22 : c + d * e
Gambar 7.23 : a + b / c * d ^ e + f / g Gambar 7.24 : A D B L E N T Z V P M
Terlihat bahwa hasil yang diperoleh dari traversal pohon yang menyajikan ekspresi aritmetika, merupakan ekspresi aritmetika secara notasi prefix, infix serta postfix. Hanya di sini urutan operasi berdasarkan hirarki operator dan tanda kurung yang diberikan tidak terjaga pada traversal in-order. Keunggulan post-order, selain tidak memerlukan tanda kurung, juga dapat lebih mudah dikomputasi.
Operator selalu didahului oleh dua operand. Namun traversal in-order menunjuk-kan keunggulannya pada traversal pohon pada Gambar 7.24. Hasil traversal adalah urut secara alfabetik. Pre-order banyak digunakan dalam sistem manajemen database seperti Information Management System (IMS) dari IBM. Traversal pre-order ekivalen dengan hirarchi sequence order dari IMS.
Jadi ketiga metode traversal tersebut sama-sama penting, sehingga perlu kita ketahui dengan baik. Juga dapat dicatat bahwa pemberian penuding (pointer) arah tra-versal, baik secara pre-in atau post-order sangat membantu. Pohon yang telah dilengkapi dengan penuding tersebut, seperti pada Gambar 7.25 sampai 7.28(b) berupa garis putus-putus, disebut pohon binar berbenang atau threaded. 1. Susun serta
beri tanda kurung ekspresi yang dimaksud
2. Tentukan hirarki atau tingkatan dari operator aritmetika yang berlaku 3. Mulailah dari tingkat tertinggi, pembentukan pohon dari bawah ke atas.
Berikut ini beberapa contoh pohon binar untuk menyajikan ekspresi secara infix, prefix, dan postfix yang bersangkutan. Contoh 7.1 Ekspresi infix : ( K + L + M – N – E – F ) * G / H mempunyai pohon binar seperti pada Gambar 7-29. Notasi infix : ( ( ( ( ( ( (K+L) +M) – N) – E) – F) *G) /H), hasil operasinya akan sama dengan notasi (K+ L + M – N – E – F) *G / H.
Prefix untuk Gambar 7.29 adalah : K / L * M – N – E – F + G + H Postfix untuk Gambar 7.29 adalah : K + L + M – N – E – F * G / H
BAB IV
KESIMPULAN
Tree adalah sebuah struktur linier, biasanya digunakan untuk menggambarkan hubungan yang bersifat hirarkis antara elemen-elemen yang ada. Ada beberapa istilah dalam tree ini, yang mana masiMEng-masing istilah mempunyai arti dalam kaitannya dengan hirarki antar elemen dalam tree tersebut, seperti sibling, descendant dsb. 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 berada di bawah node induknya.
DAFTAR PUSTAKA
Abdul Aziz, Modul Praktikum Struktur Data & Algoritma (SDA) Materi Kuliah – Struktur Data Wikipedia http://en.wikipedia.org/wiki/Bin