2021
Disusun oleh
BANDUNG
KATA PENGANTAR
Puji syukur penulis panjatkan kehadirat Tuhan Yang Maha Esa yang telah memberikan
limpahan rahmat, hidayah, serta inayah-Nya. Sehingga penulis dapat menyusun laporan
berjudul “LAPORAN HASIL ANALISA BINARY TREE”.
Laporan ini disusun untuk menambah pengetahuan kita mengenai cara menganalisis
program Binary Tree dengan baik dan benar. Selain itu juga dapat menambah keterampilan
kita dalam membuat program Binary Tree serta analasis Binary Tree yang baik.
Dalam menyusun laporan ini, penulis menyadari masih banyak kesalahan dan
kekurangan. Oleh sebab itu, penulis mengharapkan saran dan kritik yang bersifat membangun
dan dapat dijadikan bahan koreksi untuk memperbaiki penyusunan laporan berikutnya.
Semoga laporan ini dapat bermanfaat khususnya bagi penulis dan umumnya bagi para
pembaca.
Penulis
i
DAFTAR ISI
ii
BAB I
PENDAHULUAN
Sebuah binary search tree (bst) adalah sebuah pohon biner yang boleh kosong, dan
setiap nodenya harus memiliki identifier/value. Value pada semua node subpohon sebelah
kiri adalah selalu lebih kecil dari value dari root, sedangkan subpohon di sebelah kanan
adalah sama atau lebih besar dari value pada root, masing-masing subpohon tersebut
(kiri&kanan) itu sendiri adalah juga bst.
Struktur data bst sangat penting dalam struktur pencarian, misalkan, dalam kasus
pencarian dalam sebuah list, jika list sudah dalam keadaan terurut maka proses pencarian
akan sangar cepat, jika kita menggunakan list contigue dan melakukan pencarian biner.
Akan tetapi, jika kita ingin melakukan perubahan isi list (insert/delete), menggunakan list
contigue akan sangat lambat, karna proses insert dan delete dalam list contigue butuh
memindahkan banyak elemen setiap saat. Mungkin kita bisa juga menggunakan linked-list,
yang untuk operasi insert atau delete tinggal mengatur-atur pointer, akan tetapi pada linked-
list, kita tidak bisa melakukan pointer sembarangan setiap saat, kecuali hanya satu kali
dengan kata lain hanya secara sequential.
1
1.2 Tujuan Masalah
1. Untuk mengetahui dan menganalisa error dari syntax yang telah diberikan beserta
perbaikannya.
2. Untuk mengetahui output yang dihasilkan oleh syntax tersebut.
3. Untuk bisa memahami dan mempelajari cara untuk menjelaskan dari setiap fungsi yang
ada pada syntax yang telah diberikan.
BAB II
TINJAUAN PUSTAKA
Decrease and conquer : metode desain algoritma dengan mereduksi persoalan menjadi
beberapa sub-persoalan yang lebih kecil, tetapi selanjutnya hanya memproses satu sub-
persoalan saja. Berbeda dengan divide and conquer yang memproses semua sub-
persoalan dan menggabung semua solusi setiap sub-persoalan
Decrease dan conquer terdiri dari dua tahapan:
1. Decrease : mereduksi persoalan menjadi beberapa persoalan yang lebih kecil
(biasanya dua sub-persoalan)
2. Conquer : memproses satu sub-persoalan secara rekursif. Tidak ada tahap
combine dalam decrease and conquer.
Tiga varian decrease and conquer:
1. Decrease by a constant : ukuran instan persoalan direduksi sebesar konstanta
yang sama setiap iterasi algoritma. Biasanya konstanta=1.
2. Decrease by a constant factor : ukuran instan persoalan direduksi sebersar
faktor konstanta yang sama setiap iterasi algoritma. Biasanya faktor
konstanta=2.
3. Decrease by a variable size : ukuran instan persoalan direduksi bervariasi pada
setiap iterasi algoritma.
2
Algoritma decrease and conquer :
Ukuran persoalan selalu berkurang dengan faktor setengah dari ukuran semula. Hanya setengah
bagian yang diproses, setengah bagian yang lain tidak diproses.
BAB III
IMPLEMENTASI PROGRAM
Binary Tree dapat dibuat dengan menggunakan linked list secara rekursif dan linked
list yang digunakan adalah double linked list non circular. Dimana, data yang pertama kali
masuk akan menjadi node root.
Data yang lebih kecil dari data node root akan masuk dan menempati node kiri dari node root,
sedangkan jika lebih besar dari data node node root akan masuk dan menempati node disebelah
kanan node root.
3
3.2 Contoh Program
Contoh program berikut akan dibagi menjadi 3 bagian dengan masing-masing nama
yaitu, Tree.h (sebagai header), Tree.cpp (bagan dari program), MainTree.cpp (main dari
program).
Adapun contoh programnya adalah sebagai berikut:
Tree.h
4
Tree.cpp
5
6
MainTree.cpp
7
3.3 Analisis Fungsi
1. Fungsi Add
Fungsi Add disini ditujukan untuk menambahkan data dimana data pertama akan
dijadikan node root dikarenakan adanya (**root) yang berarti rekursif sehingga menjadikannya
node root. Jika akan menambahkan data berikutnya, data akan dibandingkan dengan data root
sehingga jika data lebih kecil dari root, maka akan di letakan di sebelah kiri dan jika data lebiih
besar dari root maka akan diletakan di sebelah kanan, begitu seterusnya dengan data-data yang
akan dimasukan.
8
2. Fungsi Preorder
Fungsi preorder ditujukan untuk mengeluarkan output dengan urutan yakni, node root,
lalu sisi kiri dan kemudian sisi kanan. Jika root tidak sama dengan NULL artinya jika data root
telah disii/ada maka preorder akan mengunjungi sebelah kiri terlebih dahulu lalu kemudian ke
sebelah kanan dengan diawali data root itu sendiri.
3. Fungsi Inorder
Fungsi Inorder berbeda dengan fungsi preorder fungsi ini ditujukan untuk
mengeluarkan output dengan urutan yakni, data yang ada di sebelah kiri, lalu cetak root,
kemudian data yang ada di sebelah kanan. Jika root tidak sama dengan NULL artinya jika data
root telah diisi/ada maka Inorder akan mengunjungi ke sebelah kiri dulu, lalu cetak node root,
kemudian mengunjungi data sebelah kanan.
9
4. Fungsi Postorder
Fungsi ini seperti kebalikan dari fungsi preorder tetapi tidak sama, jika di fungsi
preorder node root yang akan dicetak terlebih dahulu, di dalam fungsi postorder, node root
akan dicetak di akhir. Fungsi ini ditujukan untuk mengeluarkan output dengan urutan yakni,
kunjungi data terkecil yang ada di sebelah kiri terlebih dahulu, lalu kunjungi data yang ada di
sebelah kanan, kemudian cetak node rootnya. Jika root tidak sama dengan NULL artinya jika
data root telah diisi/ada maka postorder akan mengunjungi data terkecil di sebelah kiri, lalu
mengunjungi data sebelah kanan lalu cetak node root.
5. Fungsi Cari
Fungsi ini ditujukan untuk mencari data yang ada didalam Binary Tree. Jika root sama
dengan NULL artinya root kosong, maka akan bernilai FALSE. Lainnya jika data yang dicari
lebih kecil dari root maka pencarian akan mengunjungi data sebelah kiri, lainnya jika data yang
dicari lebih besar dari root, maka pencarian akan mengunjungi data di sebelah kanan, lainnya
jika data sama dengan data root maka akan bernilai TRUE.
10
6. Fungsi Cek
Fungsi cek ini ditujukan untuk melakukan cek data yang ada didalam Binary Tree untuk
menentukan apakah data yang dicari ditemukan atau tidak. Jika data yang dicari ada atau
bernilai TRUE, maka cetak “data (nilai) ditemukan” dan jika data yang dicari bernilai FALSE
atau tidak ada, maka cetak “data (nilai) tidak ditemukan”.
7. Fungsi Count
Fungsi ini ditujukan untuk menghitung jumlah data yang dimasukan ke dalam Binary
Tree. Jika root sama dengan NULL artinya data root tidak ada, maka akan bernilai FALSE.
Lainnya jika root tidak sama dengan NULL artinya data root diisi/ada maka akan mulai
menghitung dari data yang ada di sebelah kiri dan ditambah dengan data yang ada di sebelah
kanan.
8. Fungsi Height
11
Fungsi ini ditujukan untuk mengetahui tingkatan atau level dari data yang ada di dalam
Binary Tree. Jika root sama dengan NULL artinya jika data root tidak ada atau kosong, maka
akan bernilai FALSE. Lainnya jika h1 sama dengan height data sebelah kiri, h2 sama dengan
height data sebelah kanan, jika h1 lebih besar dari h2 maka akan bernilai h1 adalah TRUE.
Lainnya jika h2 lebih besar dari h1, maka akan bernilai h2 adalah TRUE.
9. Fungsi Leaf
Fungsi ini ditujukan untuk mengetahui nilai data yang tidak memiliki succesor atau
dengan kata lain, nilai yang paling bawah. Jika root sama dengan NULL artinya root tidak ada,
maka cetak “Tree Kosong”. Jika data di sebelah kiri tidak sama dengan NULL artinya data di
sebelah kiri terisi atau ada, maka ada leaf di dalam data sebelah kiri. Jika data di sebelah kanan
tidak sama dengan NULL artinya data di sebelah kanan terisi atau ada, maka ada leaf di dalam
data sebelah kanan. Jika data sebelah kiri sama dengan NULL artinya data kosong atau tidak
ada AND data sebelah kanan sama dengan NULL artinya data kosong atau tidak ada. Cetak
data berdasarkan fungsi diatas jika ada maka di cetak jika tidak ada maka tidak akan tercetak.
12
3.4 Output dari Program
Sebelum itu penulis ingin memberitahukan bahwa terdapat error di dalam syntax dan
menunjukkan perbaikannya.
Dan dikarenakan didalam MainTree.cpp tidak ada syntax untuk menguji fungsi height, cari,
dan leaf, maka penulis berinisiatif untuk membuatkan syntax untuk menunjukkan hasil dari
fungsi tersebut.
13
BAB IV
PENUTUP
4.1 Kesimpulan
Dari uraian pada pembahasan yang disajikan, maka ditarik sebuah kesimpulan bahwa:
1. Binary Tree adalah suatu tree dengan syarat bahwa tiap node (simpul) hanya
boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah.
Tiap node dalam Binary Tree hanya boleh memiliki paling banyak dua child
(anak simpul), secara khusus anaknya dinamakan kiri dan kanan.
2. Terdapat tiga jenis binary tree diantaranya pertama adalah Full Binary Tree
yaitu semua node atau simpul (kecuali leaf) pasti memiliki 2 anak dan tiap
subtreememiliki panjang path yag sama,kedua adalah Complete Binary Tree
yaitu pada dasarnya mirip dengan full binary tree, tapi tiap subtree boleh
memiliki panjang path yang berbeda dan tiap node ((kecuali left ) memiliki 2
anak. Dan yang ketiga adalah Skewed Binary Tree yaitu binary tree yang semua
nodenya (kecuali leaf)hanya memiliki satu anak.
3. Terdapat beberapa operator-operator yang bekerja dalam binary tree yaitu
search/cari,delete,insert/add,transverse,create,clear dan masih banyak yang
lainnya.
4. Implementasi program yaitu dapat dibuat dengan menggunakan linked list
secara rekursif dan linked list yang digunakan adalah double linked list non
circular.
14