BAB XI Manipulasi Binary Tree

dokumen-dokumen yang mirip
Binary Tree kosong Gambar 1. Binary Tree dalam kondisi kosong

IT234 Algoritma dan Struktur Data. Tree

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II

: Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Linked List. Single Linked List

PENCARIAN KITAB BESERTA PASAL PADA ALKITAB BERDASARKAN KATA DENGAN MENGGUNAKAN STRUKTUR DATA TRIE

Menghapus Pointer Statement yang digunakan untuk menghapus pointer adalah Dispose, yang mempunyai bentuk umum : Dispose(peubah) ;

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Tree (Pohon)

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

TREE ALGORITMA & STRUKTUR DATA. Materi ASD Fakultas Teknik Elektro & Komputer UKSW ( Download Dari :

ALGORITMA & PEMROGRAMAN

SEARCHING. Pusat Pengembangan Pendidikan Universitas Gadjah Mada 1

6. TREE / BINARY TREE

MODUL PRAKTIKUM STRUKTUR DATA

A B C D E F. Gambar 1. Senarai berantai dengan 6 simpul

Struktur Data. Queue (Antrian)

Algoritma dan Struktur Data. Linear & Binary Search Tree

BINARY SEARCH TREE. TUJUAN UMUM Mahasiswa memahami binary search Tree

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II. : Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Queue.

LIST LINIER 1. DEFINISI

A B C E F G K Contoh Tree

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 14 & 15

BAB VII ALGORITMA DIVIDE AND CONQUER

Double linked list. Gambar 1. Double linket list dengan empat simpul Deklarasi Double Linked List di dalam Pascal :

List Linier. IF2030/Algoritma dan Struktur Data. 11/6/2009 FNA+WDS/IF2030/Sem

ALGORITMA DAN STRUKTUR DATA

Buku Ajar Struktur Data

TREE. Definisi. Istilah-istilah Umum dalam Tree

Syarif Abdullah (G )

RESUME A B C D. Gambar 1 Double Linked list dengan Empat Simpul

ANALISIS ALGORITMA BINARY SEARCH

PENCARIAN BERUNTUN (SEQUENTIAL SEARCHING)

BAB II STACK Atau TUMPUKAN

Lab. Teknik Informatika Struktur Data 1

STRATEGI DIVIDE AND CONQUER

GANJIL 2009/2010 NIM: Algoritma dan Struktur Data / CS2014 Nama :

Representasi Logic List Linier

Algoritma Pemrograman & Struktur Data

List Linier (Bag. I) IF2121/Algoritma dan Struktur Data Sem. I 2016/ /25/2017 IF2121/Sem I 2017/2018 1

MODUL PRAKTIKUM STRUKTUR DATA Modul ke-1, Pertemuan ke-1 Nama file : P01-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: Senarai, Traversal

Pointer. Pengertian. Struktur Data Pascal

Algoritma dan Struktur Data. Binary Tree & Binary Search Tree (BST)

3. DOUBLE LINK LIST. Lab. Teknik Informatika Struktur Data 1

Linked List. Bandung 2013

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

ALGORITMA PENGURUTAN & PENCARIAN

KERUGIAN DAN KEUNTUNGAN LINKED LIST

TREE STRUCTURE (Struktur Pohon)

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Queue (Antrian)

Pohon Biner Bagian 2 (Pohon Seimbang, Pohon Biner Terurut, Pembangunan Pohon Biner dari Pita Karakter/String)

Bagian I. Studi Kasus [82] Tanda tangan:

Silsilah keluarga Hasil pertandingan yang berbentuk turnamen Struktur organisasi dari sebuah perusahaan. B.1 Pohon Biner (Binary Tree)

Penerapan Pohon Untuk Memanipulasi dan Meritrieve Data

Pohon Biner (Bagian 1)

Implementasi Skema Pohon Biner yang Persistent dalam Pemrograman Fungsional

Penerapan Pohon Dalam Heap Sort

HEAP. Heap dan Operasinya. Oleh Andri Heryandi

Kecerdasan Buatan. Penyelesaian Masalah dengan Pencarian... Pertemuan 02. Husni

Searching [pencarian] Algoritma Pemrograman

BAB IX LINKED LIST (SENARAI BERANTAI)

Tree (Struktur Data) Nisa ul Hafidhoh, MT

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

List akan disimpan dalam bagian memori komputer yang dinamakan HEAP

Pohon dan Pohon Biner

1 Pencarian. 1.1 Tinjauan Singkat Larik

Algoritma dan Pemrograman Searching/Pencarian

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

BAB VI SEARCHING (PENCARIAN)

Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP

BAB V SORTING (PENGURUTAN) INTERNAL

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Stack (Tumpukan)

Politeknik Elektronika Negeri Surabaya

Double Linked List DIKTAT KULIAH. Pertemuan 6

IKG2A3/ Pemrograman Terstruktur 2

SENARAI BERANTAI (LINK LIST)

MODUL IV PENCARIAN DAN PENGURUTAN

ANALISIS ALGORITMA PEMBANGUN POHON EKSPRESI DARI NOTASI PREFIKS DAN POSTFIKS

DIKTAT STRUKTUR DATA Oleh: Tim Struktur Data IF

SEQUENTIAL SEARCH 11/11/2010. Sequential Search (Tanpa Variabel Logika) untuk kondisi data tidak terurut

A. TUJUAN Mahasiswa diharapkan mampu : 1. Memahami Konsep Binary Search Tree 2. Mengimplementasaikan Binary Search Tree

Aplikasi Rekursif dalam Analisis Sintaks Program

Algoritma dan Struktur Data. Pertemuan 7 Linked List

13/12/2013. Binary Tree. Contoh Tree

4 LINKED LIST. 4.1 Istilah-istilah 1. Simpul Simpul terdiri dari dua bagian, yaitu : Bagian data Bagian pointer yang menunjuk ke simpul berikutnya.

Pohon Biner dan Aplikasinya

Optimalisasi Algoritma Pencarian Data Memanfaatkan Pohon Biner Terurut

Algoritma dan Struktur Data. Click to edit Master subtitle style Konsep Tree

Algoritma dan Struktur Data. Pertemuan 8 Doubly Linked List

Pohon Biner. Tim Pengajar IF2030 Semester I/ /8/2009 FNA/IF2030/Sem

Kode Huffman. Arya Tri Prabawa Program Studi Teknik Informatika ITB, Bandung 40116,

Pemrograman Algoritma Dan Struktur Data

Kecerdasan Buatan Penyelesaian Masalah dengan Pencarian

Tree. Perhatikan pula contoh tree di bawah ini : Level. Level 2. Level 3. Level 4. Level 5

PENGULANGAN Bagian 1 : Notasi. Tim Pengajar KU1071 Sem

Politeknik Elektronika Negeri Surabaya

IKG2A3/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Variasi List Linier

OPERASI LOGIKA PADA GENERAL TREE MENGGUNAKAN FUNGSI REKURSIF

STACK (TUMPUKAN) Secara sederhana, sebuah tumpukan bisa kita ilustrasikan seperti gambar berikut.

QUEUE ( ANTREAN ) 4.1. PENGERTIAN QUEUE (ANTREAN)

STACK ATAU TUMPUKAN 3.1 DAFTAR LINEAR

Transkripsi:

www.hansmichael.com - Bab XI. Manipulasi Binary Tree BAB XI Manipulasi Binary Tree 11.1 Insert Node 11.2 Search Node 11.3 Delete Node 11.4 Copy Tree 11.5 Latihan Soal Binary tree seringkali diterapkan dalam proses searching, sehingga binary tree juga disebut sebagai binary search tree. Konsep dasar binary search tree yaitu bahwa child kiri lebih kecil dari root dan child kanan lebih besar dari root. Agar dapat melaksanakan konsep ini, maka perlu dipahami proses manipulasi binary tree sebagai binary search tree, yaitu insert node, delete node, search node dan copy node. 11.1 Insert Node Proses manipulasi pada binary tree yang pertama kali perlu diketahui adalah proses insert node. Sebelum menginsertkan sebuah node, node yang akan diinsertkan perlu dibuat terlebih dahulu. Proses pembuatan sebuah node baru adalah sebagai berikut: mengalokasikan memori untuk node tersebut dengan fungsi New, dan selanjutnya menginisialisasi node tersebut dengan memasukkan data atau info pada NewNode^.Info dan nilai nil pada NewNode^.LPtr serta NewNode^.RPtr. Berikut ini diberikan sebuah function Create_Node yang berfungsi membuat node baru sesuai dengan langkah-langkah yang telah diberikan. 1: FUNCTION Create_Node(X: BinInfoType): BinTreeType; {Membuat node baru dan mengembalikan pointer dari node baru tersebut} 2: VAR 3: NewNode: BinTreeType; 4: BEGIN 5: New(NewNode); 6: WITH NewNode^ DO 7: BEGIN 8: LPtr := NIL; Program 11.1 Function untuk Membuat Sebuah Node Baru 99

www.hansmichael.com - Bab XI. Manipulasi Binary Tree 100 9: Info := X; 10: RPtr := NIL; 11: END; 12: CreateNode := NewNode; 13: END; Program 11.1 Function untuk Membuat Sebuah Node Baru (Lanjutan) Untuk menginsertkan sebuah node baru ke dalam binary tree dapat dilakukan dengan dua cara, yaitu secara iteratif dan rekursif. Algoritma umum proses insert node secara iteratif adalah sebagai berikut: 1. Jika tree masih kosong (tidak mengandung node) maka arahkan root ke node tersebut dan keluar. 2. Mengarahkan pointer ke alamat node root. 3. Ulangi langkah 4 selama lokasi yang diproses belum kosong. 4. Jika X atau Info yang baru lebih kecil dari node yang diproses maka: a) Jika subtree kiri dari node yang diproses tidak kosong maka arahkan pointer pada node sebelah kiri dari node yang diproses. b) Jika tidak, maka insertkan node baru pada subtree kiri dari node yang diproses dan keluar. 5. Jika X atau Info yang baru lebih besar dari node yang diproses maka: a) Jika subtree kanan dari node yang diproses tidak kosong maka arahkan pointer pada node sebelah kanan dari node yang diproses. b) Jika tidak, maka insertkan node baru pada subtree kanan dari node yang diproses dan keluar. 6. Jika X atau Info yang baru sama dengan node yang diproses maka terjadi duplikasi data. Untuk lebih jelasnya, berikut ini diberikan procedure lengkap untuk proses insert node secara iteratif. 1: PROCEDURE Insert(VAR Root:BinTreeType;X:BinInfoType;VAR Found:Boolean); {Proses insert node pada binary tree} 2: VAR 3: T,NewNode: BinTreeType; Program 11.2 Procedure Insert Secara Iteratif

www.hansmichael.com - Bab XI. Manipulasi Binary Tree 101 4: Finish : Boolean; 5: BEGIN 6: Found := False; 7: NewNode := Create_Node(X); 8: IF Root = NIL THEN 9: Root := NewNode 10: ELSE 11: BEGIN 12: T := Root; 13: Finish := False; 14: WHILE NOT Finish DO 15: BEGIN 16: IF X < T^.Info THEN 17: IF T^.LPtr <> NIL THEN 18: T := T^.LPtr 19: ELSE 20: BEGIN 21: T^.LPtr := NewNode; 22: Finish := True; 23: END 24: ELSE 25: IF X > T^.Info THEN 26: IF T^.RPtr <> NIL THEN 27: T := T^.RPtr 28: ELSE 29: BEGIN 30: T^.RPtr := NewNode; 31: Finish := True; 32: END 33: ELSE 34: BEGIN 35: Finish := True; 36: Found := True; 37: END; 38: END; 39: END; 40: END; {membuat node baru} {jika empty tree} { maka head = newnode} {jika bukan empty tree} {inisialisasi} {kasus 1: insert di subtree kiri} {kasus 2: insert di subtree kanan} {kasus 3: duplikasi data} Program 11.2 Procedure Insert Secara Iteratif (Lanjutan) Setelah mengerti proses insert node secara iteratif, berikut ini akan dijelaskan mengenai proses rekursifnya. Prinsip rekursif diterapkan untuk melakukan proses insert node pada subtree kiri atau kanan dengan sebuah

www.hansmichael.com - Bab XI. Manipulasi Binary Tree 102 pandangan bahwa subtree juga merupakan sebuah tree. Dengan menggunakan prinsip rekursif, maka algoritma umum insert node adalah sebagai berikut 1. Jika tree masih kosong maka arahkan root ke node tersebut dan keluar. 2. Jika X atau Info yang baru lebih kecil dari info dari node yang diproses maka insertkan node baru tersebut ke subtree kiri dari node yang diproses (secara rekursif). 3. Jika X atau Info yang baru lebih besar dari info dari node yang diproses maka insertkan node baru tersebut ke subtree kanan dari node yang diproses (secara rekursif). 4. Jika X atau Info yang baru sama dengan info dari node yang diproses maka terjadi duplikasi data. Berdasarkan algoritma tersebut, maka dapat disusun procedure Insert secara rekursif pada program 11.3. 1: PROCEDURE Insert(VAR Root: BinTreeType; X: BinInfoType; VAR Found: Boolean); {Insert node pada binary tree secara rekursif} 2: BEGIN {kasus 1: create node pada root -> pemberhenti rekursif} 3: IF Root = NIL THEN 4: BEGIN 5: Root := Create_Node(X); 6: Found := False; 7: END 8: ELSE {kasus 2: insert di subtree kiri -> rekursif} 9: IF X < Root^.LPtr THEN 10: Insert(Root^.LPtr,X,Found) 11: ELSE {kasus 3: insert di subtree kanan -> rekursif} 12: IF X > Root^.RPtr THEN 13: Insert(Root^.RPtr,X,Found) 14: ELSE {kasus 4: duplikasi data} 15: Found := True; 16: END; Program 11.3 Procedure Insert Secara Rekursif Dengan melihat proses rekursif dari insert node pada binary tree, ternyata rekursif lebih mudah dibandingkan iteratif, namun mempunyai kelemahan yaitu membutuhkan stack yang cukup besar untuk melakukan proses rekursif.

www.hansmichael.com - Bab XI. Manipulasi Binary Tree 103 11.2 Search Node Operasi selanjutnya yang perlu dipelajari adalah operasi search node pada binary tree. Proses searching ini dapat dilakukan secara iteratif dan dapat pula secara rekursif, seperti halnya pada proses insert node. Pada bagian ini hanya dijelaskan proses rekursifnya saja. Prinsip rekursif dari proses searching adalah sebagai berikut: jika informasi root tidak sama dengan yang diinginkan maka carilah (secara rekursif) pada subtree kiri jika informasi yang diinginkan lebih kecil dari root, dan carilah (secara rekursif) pada subtree kanan jika informasi yang diinginkan lebih besar dari root. Dengan prinsip tersebut, dapat dibuat sebuah procedure Search_Node (program 11.4). 1: PROCEDURE Search_Node(Root: BinTreeType; X: BinInfoType; VAR Location: BinTreeType; VAR Found: Boolean); {Mencari node dengan info X dan menghasilkan Location jika ditemukan. Jika ditemukan maka Found berisi True dan jika tidak maka Found berisi False.} 2: BEGIN {kasus 1: data tidak ketemu} 3: IF Root = NIL THEN 4: Found := False 5: ELSE {kasus 2: data ketemu} 6: IF X = Root^.Info THEN 7: BEGIN 8: Location := Root; 9: Found := True; 10: END 11: ELSE {kasus 3: pencarian pada subtree kiri} 12: IF X < Root^.Info THEN 13: Search_Node(Root^.LPtr,X,Location,Found) 14: ELSE {kasus 4: pencarian pada subtree kanan} 15: Search_Node(Root^.RPtr,X,Location,Found); 16: END; Program 11.4 Procedure Search Suatu Node 11.3 Delete Node Operasi lainnya yang dapat diterapkan pada binary tree adalah proses penghapusan (delete) sebuah node. Proses delete ini dapat dilakukan untuk setiap node dalam binary tree, termasuk root.

www.hansmichael.com - Bab XI. Manipulasi Binary Tree 104 Algoritma umum delete node secara rekursif adalah sebagai berikut: 1. Jika Root = nil maka node tersebut tidak ditemukan. 2. Jika X atau Info yang akan dihapus lebih kecil dari Root^.Info maka lakukan penghapusan Info pada subtree kiri dari Root. 3. Jika X atau Info yang akan dihapus lebih besar dari Root^.Info maka lakukan penghapusan Info pada subtree kanan dari Root. 4. Jika X atau Info yang akan dihapus sama dengan Root^.Info maka: a) Jika Root tersebut merupakan leaf, maka hapuslah Root tersebut dan jadikan Root = NIL. b) Jika Root tersebut tidak mempunyai subtree kanan maka: P = Root, Root = Root^.RPtr, dan hapuslah P. c) Jika Root tersebut mempunyai subtree kanan maka: i) Carilah inorder successor dari node Root. Inorder successor dari node x adalah node setelah node x menurut traversal inorder. ii) Gantilah informasi pada Root dengan informasi dari inorder successornya. iii) Hapuslah node inorder successor Root dengan rootnya adalah Root^.RPtr. Untuk lebih jelasnya dapat dilihat pada procedure Delete (program 11.5) dalam bahasa pemrograman Pascal. 1: PROCEDURE Delete(VAR Root: BinTreeType; X: BinInfoType; VAR Found: Boolean); {Delete node X pada binary tree} 2: VAR 3: P: BinTreeType; 4: BEGIN {kasus 1: empty tree} 5: IF Root = NIL THEN 6: Found := False 7: ELSE {kasus 2: pencarian pada subtree kiri} 8: IF X < Root^.Info THEN 9: Delete(Root^.LPtr,X,Found) 10: ELSE {kasus 3: pencarian pada subtree kanan} 11: IF X > Root^.Info THEN Program 11.5 Procedure Delete Suatu Node

www.hansmichael.com - Bab XI. Manipulasi Binary Tree 105 12: Delete(Root^.RPtr,X,Found) 13: ELSE 14: BEGIN {kasus 4: pencarian ketemu, melakukan delete node} 15: Found := True; {kasus 4a: merupakan leaf} 16: IF (Root^.LPtr = NIL) AND (Root^.RPtr = NIL) THEN 17: BEGIN 18: Root := NIL; 19: Dispose(Root); 20: END 21: ELSE {kasus 4b: tidak mempunyai subtree kanan} 22: IF Root^.RPtr = NIL THEN 23: BEGIN 24: P := Root; 25: Root := Root^.LPtr; 26: Dispose(P); 27: END 28: ELSE {kasus 4c: mempunyai subtree kanan} 29: BEGIN {mencari inorder successor} 30: P := Root^.RPtr; 31: WHILE P^.LPtr <> NIL DO 32: P := P^.LPtr; 33: Root^.Info := P^.Info; {menghapus inorder successor} 34: Delete(Root^.RPtr,P,Found); 35: END; 36: END; 37: END; Program 11.5 Procedure Delete Suatu Node (Lanjutan) 11.4 Copy Tree Operasi terakhir yang dibahas adalah operasi penggandaan (copy) sebuah binary tree. Operasi copy ini terutama berguna bila akan dilakukan suatu operasi yang akan menghancurkan atau mengubah tree tersebut, sehingga perlu dibuat duplikatnya. Berikut ini diberikan algoritma umum yang menjalankan proses penggandaan sebuah binary tree secara rekursif. 1. Jika tree kosong, maka kembalikanlah nilai nil. 2. Membuat node baru dan menyalin informasi dari node yang akan digandakan.

www.hansmichael.com - Bab XI. Manipulasi Binary Tree 106 3. Menyalinkan subtree kiri dan kanan dari node yang akan digandakan ke subtree kiri dan kanan dari node baru (secara rekursif). 4. Mengembalikan alamat dari node baru. 1: FUNCTION Copy_BinTree(T: BinTreeType): BinTreeType; {Menyalinkan binary tree T ke binary tree baru dan mengembalikan alamatnya} 2: VAR 3: NewNode: BinTreeType; 4: BEGIN {langkah 1: check apakah empty tree} 5: IF T = NIL THEN 6: Copy_BinTree := NIL 7: ELSE 8: BEGIN {langkah 2: membuat node baru dan menyalin informasi node} 9: New(NewNode); 10: NewNode^.Info := T^.Info; {langkah 3: menyalinkan subtree kiri dan kanan} 11: NewNode^.LPtr := Copy_BinTree(T^.LPtr); 12: NewNode^.RPtr := Copy_BinTree(T^.RPtr); {langkah 4: mengembalikan alamat node baru} 13: Copy_BinTree := NewNode; 14: END; 15: END; Program 11.6 Procedure Untuk Menggandakan Suatu Binary Tree 11.5 Latihan Soal 1. Buatlah sebuah function untuk membandingkan dua buah binary tree yang akan mengembalikan nilai true jika sama dan false jika tidak sama. 2. Buatlah sebuah procedure yang melakukan searching node pada binary tree secara iteratif. 3. Buatlah sebuah procedure untuk mencari node predecessor secara inorder dari sebuah node pada binary tree. 4. Buatlah sebuah procedure untuk membalik sebuah binary tree, child kiri menjadi child kanan dan sebaliknya. 5. Buatlah sebuah procedure untuk menghapus semua node pada level tertentu dari sebuah binary tree. Catatan: Nomor level merupakan parameter input. 6. Ada sebuah metode lain untuk menghapus sebuah node pada suatu binary tree. Pada setiap node mempunyai sebuah flag yang akan diset true jika dinyatakan

www.hansmichael.com - Bab XI. Manipulasi Binary Tree 107 dihapus. Jadi, proses menghapus sebuah node yaitu mengganti flag dari node tersebut menjadi true. Jika ternyata jumlah node yang flagnya diset true lebih dari 50%, maka perlu diorganisasi ulang. a) Buatlah sebuah function Test untuk menguji apakah binary tree tersebut telah melampaui batas maksimum dari jumlah node yang flagnya diset true. b) Buatlah sebuah procedure Reorganize untuk melakukan organisasi ulang yang akan menghapus secara fisik semua node yang flagnya diset true. Catatan: tidak boleh membentuk node baru.