7 POHON BINER BAB Definisi Pohon dan Pohon Biner Pohon adalah struktur berisi sekumpulan elemen dimana salah satu elemen adalah akar (root) dan elemen-elemen lain adalah bagian-bagian pohon yang membentuk susunan hirarki dengan akar sebagai awal mula. Elemen-elemen Pohon disebut simpul (node). Sifat sifat pohon adalah : Hanya terdapat satu jalur untuk tiap pasang simpul di pohon 2. Jumlah simpul di pohon satu lebih banyak dibanding jumlah busur.
Pohon dengan dua simpul atau lebih mempunyai sedikitnya dua daun. Struktur pohon telah biasa digunakan dalam kehidupan sehari-hari seperti : Silsilah keluarga Daftar isi buku Struktur organisasi Pohon keputusan Pohon biner adalah bentuk graf yang terhubung yang tidak memiliki sirkuit dan pada pohon biner selalu terdapat path atau jalur yang menghubungkan dua simpul dalam pohon.
Terminologi pohon biner Terminologi pada pohon biner dapat kita lihat pada termi – nologi pada hubungan keluarga. Misalnya istilah anak kiri dan anak kanan. Beberapa terminologi pada pohon biner : Simpul akar (root) simpul pohon dengan tingkatan tertinggi (dinyatakan sebagai tingkat 1) Simpul daun (leaf) simpul-simpul pada pohon yang tidak lagi memiliki simpul anak (child) Induk (parent) simpul yang merupakan induk dari children-nya Anak dari simpul x akar-akar (root) dari subpohon –subpohon dari simpul x adalah anak dari x
dengan memisalkan root sebagai level 1, jika Siblings anak dari induk yang sama Moyang (anchestor) simpul-simpul disepanjang jalur dari simpul ke root Level suatu node dengan memisalkan root sebagai level 1, jika simpul pada level p, maka children-nya adalah berada pada level p + 1 HeightI atau depth level maksimum pada suatu simpul di pohon Untuk lebih jelas mengenai terminologi pohon biner dapat kita lihat pada contoh pohon dibawah ini :
A E C F B D Dari contoh diatas diperoleh : Banyak simpul (node) : 6 (n) Banyak ruas (edge) : 5 (n-1) Root : A Leaf : D dan E Parent : A parent dari B dan C B parent dari D dan E Level : 0 = A 1 = B dan C 2 = D, E dan F Height (ketinggian) : level tertinggi + 1 2 + 1 = 3
Penyajian Kait Penyajian kait menggunakan 3 array sejajar yaitu INFO, LEFT dan RIGHT serta sebuah variabel penuding root. Masing-masing simpul N dari pohon T berkorespondensi dengan sebuah lokasi k, sehingga : INFO [k] = berisi data pada simpul N LEFT [k] = berisi lokasi dari anak kiri simpul N RIGHT [k] = berisi lokasi dari anak kanan simpul N Root akan berisi lokasi dari akar R dari pohon T. Jika suatu sub pohon hampa, maka penuding yang bersangkutan akan berisi harga nol. Jika suatu pohon T sendiri hampa, maka root akan berisi harga nol. Untuk lebih jelasnya dapat kita lihat pada contoh soal berikut :
A B D E F C G H J K L Dari pohon diatas dapat kita buat diagran skematiknya : A B E X X F X X D X c X G X H J X K X X L X
Root 5 Avail 8 NO INFO LEFT RIGHT 1 K 2 C 3 6 G 4 14 5 A 10 H 17 7 L 8 2 C 3 6 G 4 14 5 A 10 H 17 7 L 8 9 B 18 13 11 19 12 F E 15 16 J D 20 Root 5 Avail 8
Untuk menentukan atau membuat pohon biner dengan penyajian kait juga dapat dilakukan dengan cara menentu- kan root yang akan dijadikan info pertama, pada contoh misal A, penentuan left dan right secara bebas. Misal Info A left yang dipilih 10, berarti lokasi pada anak kiri simpul A adalah B (nomor 10), dan misal info A right yang dipilih adalah 2, berarti anak kanan simpul A adalah C pada posisi Ke 2. Kemudian pada info B, left yang dipilih adalah 18, berarti anak kiri simpul B adalah D pada posisi ke 18, dan right adalah 13 berarti anak kanan simpul B adalah E pada posisi ke 13. Misalnya simpul E, anak kiri (left) adalah 12 berarti anak kiri simpul E adalah F pada posisi ke 12, dan right adalah 0, berarti untuk posisi kanan dari simpul E adalah tidak ada (nol), dan begitu seterusnya……. Sehingga diagram skematik dapat dilengkapi seperti :
5 10 A 2 18 B 13 3 C 6 0 D 0 12 E 0 0 G 0 17 H 1 0 F 0 7 J 0 0 K 0 0 L 0
Penyajian Sekuensial Terdapat sebuah cara yang efisien untuk menyajikan T dalam memori dengan pohon biner T yang lengkap atau hampir lengkap . Penyajian itu hanya menggunakan sebuah array linier. Dapat kita lihat bahwa penyajian sekuensial membutuhkan 14 lokasi memori dalam array tree, meskipun T hanya mempunyai 9 simpul. Kenyataannya, bila kita memasukkan elemen nol sebagai simpul terminal, kita akan membutuhkan Tree [29] untuk suksesor kanan dari tree [14]
Dari pohon biner diatas dapat kita gambarkan sebuah array linier yang 45 22 11 77 30 90 15 25 88 6 8 12 13 tree 1 45 2 22 3 77 4 11 5 30 6 7 90 8 9 15 10 25 12 13 14 88 16 … 29 Dari pohon biner diatas dapat kita gambarkan sebuah array linier yang ditunjukkan pada gambar disebelah Kanan.
Penyajian Pohon Biner dalam Memori Kita dapat menyajikan pohon biner T dalam memori dengan 2 cara, yang pertama adalah penyajian kait (link) seperti yang telah dijelaskan sebelumnya, cara ini biasa digunakan. Cara kedua menggunakan sebuah array tunggal disebut penyajian sekuensial dari T, juga telah dijelaskan secara singkat sebelumnya. Kebutuhan utama yang harus dipenuhi pada setiap penyajian dari T adalah bahwa seorang dapat mempunyai akses langsung ke akar R dan T, dan bila diberikan sembarang simpul N, seorang harus dapat akses langsung ke anak dari N.
A B C D E F G H I J K Penyajian Pohon Umum secara Pohon Biner Kalau kita mempunyai sebuah struktur pohon yang umum (general tree) maka ada sebuah algoritma yang dapat menyajikannya secara pohon biner. Kita ingat kembali bahwa pohon biner selalu terdiri atas paling banyak 2 sub pohon, yakni sub pohon kiri dan sub pohon kanan. Pendefinisian ini berlaku secara rekursif. Gambar dibawah merupakan contoh pohon biner : Pada pohon biner dapat kita lihat bahwa setiap simpul selalu mempunyai 0, 1, atau 2 anak, tidak lebih dari itu. A B C D E F G H I J K
Gambar di bawah ini menunjukkan sebuah contoh pohon Umum yang bukan pohon biner : Pohon pada gambar tersebut bukan pohon biner, karena simpul D mempunyai 3 anak yakni simpul H, I, J. Algoritma yang kita gunakan untuk menyajikan pohon umum secara pohon biner terdiri atas 2 langkah. Pertama kita tambahkan ruas (edge) baru, menghubungkan 2 simpul bersaudara yang berdampingan, lalu kita hapus ruas dari simpul ayah (parent)ke simpul anak bersaudara tersebut, A D C B E F G H I J K L
kecuali ruas ke simpul anak paling kiri. Langkah kedua, kita melakukan rotasi sebesar 45 , searah jalannya putaran jarum jam terhadap pohon hasil langkah pertama tersebut. Pohon biner tidak mempunyai bentuk umum, karena setelah pohon biner diubah menjadi umum tidak dapat dikembalikan ke pohon binernya lagi.
Notasi Infix, Postfix dan Prefix serta Transversal Pohon Transversal pohon atau kunjungan pohon adalah proses kunjungan dalam pohon dengan setiap simpul hanya dikunjungi satu kali saja. Ketika dilakukan transversal pohon, koleksi simpul dari pohon terlihat satu persatu. Hasil dari transversal pohon adalah suatu untai simpul pohon yang urut secara linier. Suatu simpul dikatakan dikunjungi, bila simpul tersebut kita masukkan ke dalam urutan linier tersebut. Ada 3 jenis transversal pohon, yaitu : Transversal Pre-order (prefix) Transversal In-order (infix) Transversal Post-order (postfix)
Ada 3 kegiatan yang terdapat dalam transversal pohon biner : Mengunjungi simpul akar (root) Melakukan transversal sub pohon kiri dan Melakukan transversal sub pohon kanan Transversal Pre-order (prefix) Transversal pre-order (prefix) merupakan kunjungan dalam pohon yang dilakukan dari atas ke bawah. Pada transversal pre-order (prefix) dilakukan berturut-turut : Mengunjungi simpul akar Melakukan transversal sub pohon kiri secara pre-order Melakukan transversal sub pohon kanan secara pre-order
Dari notasi infix yang tersedia akan kita buat menjadi sebuah pohon biner, kemudian akan kita tentukan transversal pre-order (prefix) : Notasi infix : ( ( A – B ) / ( C * D ) + E ) Dari notasi infix diatas kita tentukan root yaitu “/” merupakan posisi paling tengah, sehingga didapat : Pada penyajian ini masing-masing simpul yang bukan daun mewakili operator, sedangkan sub pohon kiri dan kanannya merupakan operand. / - + A B * E C D
Setelah menjadi sebuah pohon biner dapat kita tentukan transversal pre-order (prefix) nya, yaitu dari atas ke bawah, yang dinyatakan dengan urutan simpul yang telah diberi tanda panah berwarna biru, mulai dari awal yaitu dari root sampai akhir simpul yaitu simpul E Dengan urutan pre-order (prefix) : / - A B + * C D E. Transversal In-order (Infix) Transversal in-order (infix) merupakan kunjungan dalam Pohon yang dilakukan dari kiri ke tengah dan ke kanan. Transversal in-order (infix) dilakukan berturut turut : Lakukan transversal sub pohon kiri secara in-order Kunjungi simpul akar Lakukan transversal sub pohon kanan secara in-order
/ - + A B * E C D Dari pohon tersebut dapat kita tentukan transversal in-order (infix) yaitu berturut-turut dari kiri ke tengah dan ke kanan. Dari panah berwarna merah yang menunjukkan Urutan simpul tersebut didapat transversal in-order (infix) Dengan urutan : A – B / C * D + E
Transversal Post-order (Postfix) Transversal post-order (postfix) merupakan kunjungan Dalam pohon yang dilakukan dari bawah ke atas. Transversal post-order (postfix) ini memakai irutan : Lakukan transversal sub pohon kiri secara post-order Lakukan transversal sub pohon kanan secara post-order Kunjungi simpul akar Dari pohon biner yang telah kita bahas secara pre-order (prefix) dan in-order (infix) juga akan kita gunakan untuk menentukan atau membahas urutan simpul pada transversal post-order (postfix), dan pada gambar dapat kita lihat urutan transversal post-order (postfix) pada tanda panah berwarna orange berikut yang dimulai dari simpul A sampai dengan simpul terakhir yaitu bagi (/).
/ - + A B * E C D Dan urutan transversal post-order (postfix) dapat kita tentukan dari simpul bawah yaitu A sampai simpul atas yaitu bagi (/), dapat kita lihat urutannya yaitu A B – C D * E + /