POHON Pohon (Tree) merupakan graph terhubung tidak berarah dan tidak mengandung circuit. Contoh: (Bukan) (Bukan) (Bukan)
Hutan yang terdiri dari 4 pohon Hutan (Forrest) merupakan kumpulan dari beberapa pohon yang tidak saling terhubung. Contoh: Hutan yang terdiri dari 4 pohon
Pohon berakar (rooted tree) adalah pohon dengan salah satu vertex- nya diperlakukan sebagai akar dan semua garis (edge) lainnya diarah- kan menjauh dari akarnya. Contoh: Terminologi: A B D C E F G H I J 1. A memiliki 3 anak (children) yaitu B, C dan D 2. B memiliki 1 anak (children) yaitu E 3. C memiliki 2 anak (children) yaitu H dan I 4. A adalah orang tua (parent) dari B, C dan D 5. D adalah orang tua (parent) dari F dan G 6. B, C dan D adalah saudara kandung (sibling) 7. A disebut juga sebagai akar (root) 8. Vertex yang tidak memiliki anak lagi disebut dengan daun (leaf). Contoh E, F, G, I dan J 9. Vertex yang masih memiliki anak disebut cabang (internal vertex). Contoh B, C, D dan H 10. A adalah ancestor dari J 11. J adalah descendant dari A
Pohon berakar biner (binary tree) adalah pohon berakar dengan sifat setiap vertex memiliki anak maksimum dua Contoh: A C E F D B I G J K L H Sub tree kiri Sub tree kanan Root Terminologi: B adalah anak kiri dari A C adalah anak kanan dari A D adalah anak kiri dari B E adalah anak kiri dari C F adalah anak kanan dari C B tidak memiliki anak kanan
POHON TELUSUR BINER (PTB) Pohon Telusur Biner (Binary Search Tree) adalan pohon berakar biner dengan sifat pada setiap node (vertex) menyimpan data yang lebih besar dari semua node pada sub tree kiri tetapi lebih kecil dari semua node pada sub tree kanan. Perhatikan pohon di bawah ini: B C D E F G H I A Penjelasan: A adalah akar (root) B, C, D dan E adalah sub tree kiri dari A F, G, H dan I adalah sub tree kanan dari A Nilai A lebih besar dari B, C, D, E tetapi lebih kecil dari F, G, H, I Nilai B lebih besar dari C tetapi lebih keci dari D dan E
Contoh: Benar Benar Salah 20 10 40 30 70 60 90 80 50 60 80 70 90 75 50
1. Membuat PTB berdasarkan urutan data yang diketahui OPERASI-OPERASI PADA PTB 1. Membuat PTB berdasarkan urutan data yang diketahui 2. Menyisipkan node baru pada PTB 3. Menelusuri semua node pada PTB 4. Membuat PTB berdasarkan hasil penelusuran 5. Menghapus node pada PTB
Membuat PTB Berdasarkan Urutan Data yang Diketahui Caranya adalah sebagai berikut: Ambil data yang paling kiri jadikan akar Ambil data urutan berikutnya bandingkan dengan akar jika lebih kecil bandingkan dengan anak kiri tetapi jika lebih besar bandingkan dengan anak kanan sampai ditemukan daun. Kerjakan sampai semua data selesai. Contoh: 35 35 50 20 5 45 30 60 55 10 50 20 5 45 30 60 55 10
Menyisipkan Node Baru Caranya hampir sama dengan membuat pohon, yaitu: Bandingkan node baru dengan akar jika lebih kecil bandingkan dengan anak kiri tetapi jika lebih besar bandingkan dengan anak kanan sampai ditemukan daun. Bila ditemukan daun buat node baru. Contoh: SisipNode(25) 20 10 30 60 40 70 35 25 SisipNode(50) 50
Catatan: Jangan pernah menyisipkan node pada PTB ditengah, node yang disisipkan selalu menjadi daun. Jika urutan data berbeda maka bentuk PTB yang dihasilkan juga berbeda. Latihan : Buatlah PTB untuk data berikut ini : 1) 70 50 35 20 10 90 75 80 30 10 90 20 80 30 75 35 70 50 90 10 80 20 75 30 70 35 50 Setelah itu sisipkan node 45
Penelusuran Node PTB Ada tiga metode penelusuran node pada PTB yaitu: Preorder Inorder C. Postorder Pre, In dan Post pada metode penelusuran di atas menunjukkan kapan akar dikunjungi. Preorder artinya kunjungan terhadap akar dilakukan pada awal, prosesnya adalah kunjungi akar, anak kiri kemudian anak kanan. Inorder artinya kunjungan terhadap akar dilakukan ditengah, prosesnya adalah kunjungi anak kiri, akar kemudian anak kanan. Postorder artinya kunjungan terhadap akar dilakukan terakhir, prosesnya adalah kunjungi anak kiri, anak kanan kemudian akar.
3.1. Preorder (Akar – Kiri – Kanan) Proses penelusuran preorder adalah sebagai berikut: 1. Kunjungi akar (root) 2. Kunjungi anak kiri (sub tree kiri) 3. Kunjungi anak kanan (sub tree kanan) 4. Kerjakan secara rekursif Contoh: Hasil penelusuran Preorder: 20 5 30 10 50 45 60 55 35 35 20 50 5 30 45 60 10 55
3.2. Inorder (Kiri – Akar – Kanan) Proses penelusuran preorder adalah sebagai berikut: 1. Kunjungi anak kiri (sub tree kiri) 2. Kunjungi akar (root) 3. Kunjungi anak kanan (sub tree kanan) 4. Kerjakan secara rekursif Contoh: Hasil penelusuran Inorder: 20 5 30 10 50 45 60 55 35 35 20 50 5 30 45 60 10 55
3.3. Postorder (Kiri – Kanan – Akar) Proses penelusuran preorder adalah sebagai berikut: 1. Kunjungi anak kiri (sub tree kiri) 2. Kunjungi anak kanan (sub tree kanan) 3. Kunjungi akar (root) 4. Kerjakan secara rekursif Contoh: Hasil penelusuran Postorder: 20 5 30 10 50 45 60 55 35 35 20 50 5 30 45 60 10 55
4. Membuat PTB Berdasarkan Hasil Penelusuran Untuk membuat PTB ada tiga aturan yang berlaku, yaitu: Jika yang diketahui hasil penelusuran preorder dan inorder, maka PTB dapat dibuat karena bentuk PTB tunggal. Jika yang diketahui hasil penelusuran postorder dan inorder, maka PTB dapat dibuat karena bentuk PTB tunggal. Jika yang diketahui hasil penelusuran preorder dan postorder, maka PTB tidak dapat dibuat karena bentuk PTB tidak tunggal.
4.1. Membuat PTB Berdasarkan Penelusuran Preorder dan Inorder Bila yang diketahui hasil penelusuran preorder dan inorder maka gunakan preorder untuk membuat PTB karena letak akar dapat diketahui yaitu data yang paling kiri dari urutan data yang ada. Contoh: Preorder : 50 30 20 40 35 70 60 90 80 Inorder : 20 30 35 40 50 60 70 80 90 Caranya: 1. Ambil hasil preorder untuk dianalisa, urutan data paling kiri jadikan akar Preorder : 50 30 20 40 35 70 60 90 80 2. Pisahkan data, data yang lebih keci dari akar merupakan anak kiri dan lebih besar merupakan anak kanan. (anak kiri) 30 20 40 35 50 70 60 90 80 (anak kanan) 3. Misalkan yang diselsaikan lebih dulu anak kiri, maka node berikutnya di bawah akar, ambil node paling kiri dari anak kiri yaitu 30, kemudian pisah datanya yang lebih kecil dari 30 ada di kiri dan lebih besar ada di kanan. Lakukan secara berulang hingga selesai. Perhatikan ilustrasi berikut ini !
Rekonstruksi PTB Berdasarkan Penelusuran Preorder 50 30 20 40 35 70 60 90 80 50 30 20 40 35 70 60 90 80 30 20 40 35 70 60 90 80 20 40 35 60 90 80 35 80 Inorder : 20 30 35 40 50 60 70 80 90 Postorder: 20 35 40 30 60 80 90 70 50
4.2. Membuat PTB Berdasarkan Penelusuran Inorder dan Postorder Bila yang diketahui hasil penelusuran inorder dan postorder maka gunakan postorder untuk membuat PTB karena letak akar dapat diketahui yaitu data yang paling kanan dari urutan data yang ada. Contoh: Inorder : 20 30 35 40 50 60 70 80 90 Postorder : 20 35 40 30 60 80 90 70 50 Caranya: 1. Ambil hasil postorder untuk dianalisa, urutan data paling kanan jadikan akar Postorder : 20 35 40 30 60 80 90 70 50 2. Pisahkan data, data yang lebih keci dari akar merupakan anak kiri dan lebih besar merupakan anak kanan. (anak kiri) 20 35 40 30 50 60 80 90 70 (anak kanan) 3. Misalkan yang diselsaikan lebih dulu anak kiri, maka node berikutnya di bawah akar, ambil node paling kanan dari anak kiri yaitu 30, kemudian pisah datanya yang lebih kecil dari 30 ada di kiri dan lebih besar ada di kanan. Lakukan secara berulang hingga selesai. Perhatikan ilustrasi berikut ini !
Rekonstruksi PTB Berdasarkan Penelusuran Postorder 20 35 40 30 60 80 90 70 50 20 35 40 30 60 80 90 70 50 20 35 40 30 60 80 90 70 20 35 40 60 80 90 35 80 Preorder: 50 30 20 40 35 70 60 90 80 Inorder : 20 30 35 40 50 60 70 80 90
4.3. Membuat PTB Berdasarkan Penelusuran Preorder dan Postorder Bila yang diketahui hasil penelusuran preorder dan postorder ternyata PTB tidak tunggal sehingga sulit ditentukan. Contoh: Preorder : A B Postorder : B A Bentuk PTB : A A Atau B B
Penghapusan Node pada PTB Untuk menghapus node pada PTB harus memperhatikan kondisi node yang dihapus, apakah daun atau memiliki anak 5.1. Node yang Dihapus adalah Daun Jika Node yang dihapus adalah daun maka node tersebut langsung dihapus. Contoh: 20 5 50 60 55 35 Hapusnode(10) Hapusnode(30) Hapusnode(45) Hapusnode(50) (Punya Anak) 30 45 10
5.2. Node yang Dihapus Memiliki Satu Anak Jika node yang dihapus memiliki satu anak, maka node tersebut akan digantikan oleh anaknya dan semua turunan anaknya bentuknya tetap. Contoh: 30 20 35 Hapusnode(5) Hapusnode(50) Hapusnode(60) (Punya 2 Anak) 50 5 70 60 55 10
5.3. Node yang Dihapus Memiliki Dua Anak Jika node yang dihapus memiliki dua anak, maka node tersebut akan digantikan oleh pendahulunya (node paling kanan subtree kiri) atau penerusnya (node paling kiri subtree kanan). Misal dipilih untuk menggantikan adalah pendahulunya, caranya : belok kiri satu langkah, lalu belok kanan sejauh mungkin ! Contoh: 10 60 40 50 20 90 75 5 Hapusnode(35) Hapusnode(80) 35 80 30 85
BENTUK-BENTUK POHON BINER 1. Pohon Biner Penuh (Full Binary Tree) Pohon biner dengan sifat setiap daun memilki ketinggian sama, sehingga banyaknya node untuk tingkat N adalah : 2N – 1 Contoh: Tingkat …………...... 1 .……………. 2 …………..… 3 40 60 30 20 70 80 50 Jumlah node = 7
Pohon Biner Lengkap Tingkat 3 2. Pohon Biner Lengkap (Complete Binary Tree) Merupakan pohon biner penuh atau jika ada daun yang tersisa maka diletakkan pada posisi sekiri mungkin. Contoh: Tingkat …………...... 1 .……………. 2 …………..… 3 …………..… 4 40 60 30 20 70 80 50 Pohon Biner Lengkap Tingkat 3 10
3. Pohon Biner Miring (Skewed Binary Tree) Pohon biner yang jumlah node kiri tidak seimbang dengan jumlah node kanan. Contoh: 40 30 50 Pohon Biner Miring ke Kiri (Left Skewed) 20 10 Pohon Biner Miring ke Kanan (Right Skewed)