• Tidak ada hasil yang ditemukan

Eksperimen Algoritma dan Struktur Data I

N/A
N/A
Protected

Academic year: 2018

Membagikan "Eksperimen Algoritma dan Struktur Data I"

Copied!
15
0
0

Teks penuh

(1)

Program Studi S1 ELINS

Laporan Eksperimen Algoritma dan Struktur Data II

Pohon Biner

NAMA : ADE SUHADA

NIM :13/349135/PA/15504 TANGGAL PRAK. : 19 November 2014

Lab. Elekronika Dasar dan Instrumentasi Dasar

Jurusan Ilmu Komputer dan Elektronika

Fakultas Matematika dan Ilmu Pengetahuan Alam

Universitas Gadjah Mada

Yogyakarta

(2)

I. Judul

Pohon Biner II. Tujuan

1. Memahami pohon biner sebagai struktur data dinamis 2. Memahami teknik pembacaan pohon biner

3. Memahami perancangan dan operasi dasar pada pohon biner

III. Landasan Teori

Pohon Biner

Dalam ilmu komputer, sebuah pohon biner(binary tree) adalah sebuah pohon struktur data dimana setiap simpul memiliki paling banyak dua anak. Secara khusus anaknya dinamakan kiri dan kanan. Penggunaan secara umum pohon biner adalah Pohon biner terurut, yang lainnnya adalah heap biner.

Sebuah pohon biner berakar (rooted binary tree) adalah sebuah pohon berakar dimana setiap simpul paling banyak mempunyai dua anak

Sebuah pohon biner penuh (full binary tree), atau pohon biner asli (proper binary tree), adalah sebuah pohon dimana setiap simpul mempunyai nol atau dua anak.

Sebuah pohon biner sempurna (perfect binary tree) (atau kadang-kadang pohon biner lengkap (complete binary tree) adalah sebuah pohon biner penuh dimana semua daun memiliki kedalaman yang sama.

Sebuah pohon biner lengkap (complete binary tree) dapat didefinisikan juga sebagai sebuah pohon biner penuh dimana semua daunnya memiliki kedalaman n atau n-1 untuk beberapa n. Agar sebuah pohon dapat menjadi sebuah pohon biner lengkap, semua anak pada tingkat terakhir harus menempati titik terkiri secara teratur, dengan tidak ada titik yang menganggur di antara keduanya. Sebagai contoh, jika dua simpul pada tingkat terbawah masing-masing menempati sebuah titik dengan suatu titik kosong di antara keduanya, tetapi sisa simpul anaknya terhimpit tanpa titik di antaranya, maka pohon tersebut tidak dapat membentuk sebuah pohon biner lengkap karena titik kosong tersebut.

Sebuah pohon biner lengkap berakar (rooted complete binary tree) dapat dikenali dengan magma bebas.

Sebuah pohon biner hampir lengkap (almost complete binary tree) adalah sebuah pohon diaman setiap simpul yang mempunyai anak kanan juga memiliki anak kiri. Memiliki anak kiri tidak memerlukan sebuah simpul untuk mempunyai anak kanan. Penjelasan lainnya, sebuah pohon biner hampir lengkap adalah sebuah pohon dimana untuk sebuah anak kanan, selalu terdapat anak kiri, tetapi untuk sebuah anak kiri, tidak selalu terdapat sebuah anak kanan.

Jumlah simpul n dalam pohon biner lengkap dapat dihitung dengan menggunakan rumus: n = 2^(h+1)-1 dimana h adalah tinggi dari pohon.

Jumlah daun n dalam sebuah pohon biner lengkap dapat dihitung dengan menggunakan rumus: n = 2^h dimana h adalah tinggi dari pohon.

(3)

dari N merupakan simpul yang terhubung ke saudara selanjutnya dari N yang merupakan simpul selanjutnya dalam urutan di antara anak-anaknya dari ayahnya N

Suatu cara untuk menyelesaikan ini adalah bahwa setiap anak simpul berada dalam sebuah linked list, dihubungkan bersama dengan bidang kanan mereka, dan simpul yang hanya memiliki sebuah petunjuk ke awalnya atau kepala dari daftar ini, melalui bidang kiri nya. Sebagai contoh, dalam sebuah pohon bagian kirinya, A memiliki 6 anak {B,C,D,E,F,G}. Ini dapat diubah manjadi sebuah pohon biner bagian kanan.

Pohon biner dapat dianggap sebagai pohon asli yang membujur kesamping, dengan tepi kirinya yang berwarna hitam menggambarkan anak pertama dan tepi kanannya yang berwarna biru menggambarkan saudara selanjutnya. Daun dari bagian kiri pohon ini dapat dituliskan dalam Lips sebagai:

(((M N) H I) C D ((O) (P)) F (L))

yang akan diimplementasikan ke memori sebagai pohon biner kanan, tanpa huruf apapun pada simpul itu yang telah memiliki anak.

IV. Flowchart

1. Flowchart untuk deklarasi Node

Start *Node

Declaration :

Integer Data

Node *kiri, Node *kanan

(4)

2. Flowchart untuk membuat Root

3. Flowchart untuk menyisipkan Daun

Start *buatNode(int kunci)

Node *temp;

Stop *buatNode(int kunci) Temp=new node; temp->data=kunci;

temp->kiri=NULL; temp->kanan=NULL;

return Temp;

Start *sisipDaun(node *root, int kunci)

return root;

Stop *sisipDaun(node *root, int kunci) Root=

=NULL

Kunci< root->data

buatNode(kunci)

Root->kiri = sisipDaun (root->kiri, kunci)

nci) Root->kanan = sisipDaun

(5)

4. Flowchart untuk menghitung Daun

NB :

A : root->kiri==NULL && root->kanan == NULL

B : hitung = hitungDaun(root->kiri) + hitungDaun(root->kanan)

5. Flowchart untuk menghitung Node

NB : D = 1 + hitungNode(root->kiri) + hitungNode(root->kanan)

Start hitungDaun(node *root)

Root= =NULL

return root; Declaration : integer hitung;

A

Hitung = 1 B

A

Stop hitungDaun(node *root)

Start hitungNode(node *root)

Root !=NUL L Declaration : integer hitung =0

(6)

6. Flowchart untuk menampilkan data secara inorder

NB :

A : tampilInorder(root->kiri) B : tampilInorder(root->kanan)

7. Flowchart untuk menampilkan data secara preorder

NB :

A : tampilPreorder(root->kiri) B : tampilPreorder(root->kanan)

Stop tampilInorder(node *root) Start tampilInorder(node *root)

Root !=NUL

L A

B Print root->data

Stop tampilPreorder(node *root) Start tampilPreorder(node *root)

Root !=NUL

L

A

B

(7)

8. Flowchart untuk mnampilkan data secara postorder

NB :

A : tampilPostorder(root->kiri) B : tampilPostorder(root->kanan)

V. Listing Program

1. Listing Program untuk Node struct node

{

int data; node *kiri; node *kanan; };

2. Listing program untuk membuat daun node *buatNode (int kunci)

{

node *temp; temp = new node; temp->data = kunci; temp->kiri = NULL; temp->kanan = NULL; return temp;

}

Stop tampilPostorder(node *root) Start tampilPostorder(node *root)

Root !=NUL

L A

B

(8)

3. Listing program untuk menyisipkan daun node *sisipDaun(node *root, int kunci) {

4. Listing program untuk menghitung daun int hitungDaun(node *root)

hitung = hitungDaun(root->kiri) + hitungDaun(root->kanan); return hitung;

}

5. Listing program untuk menghitung Node int hitungNode(node *root)

{

int hitung=0; if (root != NULL)

hitung = 1 + hitungNode(root->kiri) + hitungNode(root->kanan); return hitung;

}

6. Listing program untuk menampilkan data secara inorder void tampilInorder (node *root)

(9)

7. Listing program untuk menampilkan data secara Preorder void tampilPreorder (node *root)

{

8. Listing program untuk menampilkan data secara Postorder void tampilPostorder (node *root)

{

9. Listing program untuk menghapus data pada Node node *hapusNode(node *root,int kunci)

(10)

root->kiri = temp1->kiri;

10. Listing program untuk menghapus data keseluruhan void HapusData (node *root)

(11)

VI. Hasil

1. hasil compile program untuk :

a. menampilkan data secara inorder b. menampilkan data secara preorder c. menampilkan data secara posorder d. menghitung banyak daun

e. menghitung banyak node f. menghapus data yang dinginkan

Gambar 1. Hasil compile program 1

2. hasil compile program menampilkan bentuk urutan data preorder dan postorder

(12)

VII. Pembahasan

Program pertama digunakan untuk menyisipkan data, menampilkan data secara inorder, preorder dan juga postorder. Selain itu program pertama digunakan untuk menghitung banyaknya daun, banyaknya node, dan juga digunakan untuk menghapus node yang dinginkan. Pertama program akan membuat suatu node, node pertama ini merupakan root pertama. Kemudian dilakukan penyisipan sebanyak 5 buah, yaitu 12, 34, 67, 89, dan 90. Sehingga ketika program pertama di compile, maka untuk tampilan inorder adalah : 5, 12, 34, 67, 89, 90. Dimana pertama kali yang ditampilkan adalah node data bagian kiri node, setelah itu node nya yang ditampilkan, dan yang terakhir adalah data pada bagia kanan node. Sedangkan untuk tampilan data secara preorder, yang ditampilkan pertama adalah data pada bagian kiri node, kemudian data pada bagian kanan node, setelah itu node nya yang ditampilkan. Sehingga untuk tampilan data secra preorder adalah : 5, 12, 34, 67, 89 dan 90. Sedangkan tampilan data secara postorder adalah , pertama yang ditampilkan adalah data pada bagian kiri node, kemudian data pada bagian kanan node, dan yang terakhir adalah node itu sendiri. Sehingga urutan data untuk postorder adalah : 90, 89, 67, 34, 12 dan 5. Selain itu program untuk menghapus data adalah dengan memasukan nilai yang ingin dihapus, kemudian mencarinya pada data, apabila data kunci atau data yang akan dihapus sama dengan node, maka penghapusan selesai. Apabila data kunci lebih besar dari node, maka akan dicari data yang ingin dihapus pada bagian kanan node dan seterusnya, sedangkan apabila data kunci lebih kecil dari node, maka data yang akan dihapus dicari pada bagian kiri node, dan seterusnya. Pada program diatas, contoh data yang akan dihapus adalah 12, sehingga data pada pohon biner setelah dihapus tinggalah 5, 34, 67, 89 dan 90. Pada program pertama ini, dapat diketahui banyaknya daun hanyalah 1, sedangkan banyaknya node adalah 6.

Pada program kedua merupakan kegiatan latihan 2. Yang digunakan untuk memandingkan urutan data secara preorder dan juga secara postorder. Data pada pohon biner terurut secara Preorder adalah : 5,2,1,4,3,10,8,6,9,11. Sedangkan urutan data secara postorder adalah : 1,3,4,2,6,9,8,11,10,5. Selain itu, untuk melakukan penghapusan seluruh data dilakukan dengan cara melepas semua data (free) mulai dari data pada bagian kanan kiri node, kemudian data pada bagian kanan node dan kemudian data pada node, sehingga semua data dapat terlepas dari pohon biner.

VIII. Kesimpulan

1. Pohon biner (binary tree) merupakan salah satu struktur data dinamis sama halnya seperti linked list.

2. Pengurutan data pada pohon biner dapat dilakukan secara inorder,preorder dan juga postorder.

3. Pengurutan data secara preorder dilakukan dengan logika : a. Menampilkan data pada node.

(13)

4. Pengurutan data secara postorder dilakukan dengan logika : a. Menampikan data pada bagian kiri node.

b. Menampilkan data pada bagian kanan node. c. Menampilkan data pada node.

5. Pengurutan data secara inorder dilakukan dengan logika : a. Menampilkan data pada bagian kiri node.

b. Menampilkan data pada node.

c. Menampilkan data pada bagian kanan node.

6. Penghapusan data pada pohon biner dapat dilakukan secara terpilih staupun secara keseluruhan.

IX. Daftar pustaka

Wikipedia. ͞ Pohon Biner͟. Diakses dari :

(14)

X. Lampiran

(15)

Gambar

Gambar 2. Hasil compile program 2

Referensi

Dokumen terkait

[r]

Penghasilan yang diperoleh penduduk Negara pihak pada Persetujuan sehubungan dengan jasa-jasa profesional atau pekerjan bebas lainnya hanya akan dikenakan pajak di Negara pihak

Algoritma greedy ini membentuk solusi langkah, pada setiap langkahnya tentu path tersebut akan memiliki banyak pilihan dan kemungkinan yang dapat di eksplorasi, dengan algoritma

Status Kebersihan Gigi dan Mulut dengan Status Karies Gigi (Kajian pada Murid Kelompok Umur 12 Tahun di Sekolah Dasar Negeri Kota Bukit Tinggi).. Berita Kedokteran

Masyarakat pedesaan ditandai dengan pemilikan ikatan perasaan batin yang kuatsesama warga desa, yaitu perasaan setiap warga/anggota masyarakat yagn amat kuat yang hakekatnya,

Mengetahui rata-rata waktu tunggu konsumen dalam sistem antrian dua servers tanpa menggunakan layanan movie card.. Mengetahui rata-rata waktu tunggu konsumen dalam

Gavril continued checking the wound, his voice low, and as Ashyn watched them, she knew it didn’t matter if he kissed her sister or not; there was something between

Pajak penghasilan Pasal 21 adalah Pajak Penghasilan yang dikenakan atas penghasilan berupa gaji, upah, honorarium, tunjangan, dan pembayaran lain dengan bentuk dan nama apa pun