TREES (POHON)

advertisement
BINARY TREE (POHON BINER)
oleh : Bambang Wahyudi
Pohon biner T didefinisikan sebagai kumpulan elemen/ simpul (nodes) yang :
(a) T hampa (disebut pohon hampa / null tree/ empty tree), atau
(b) T memiliki akar R yang memiliki cabang T 1 dan T2
Akar R disebut root, cabang T1 dan T2 disebut dengan substree.dari R. Jika T1
tidak hampa, maka T1 disebut juga dengan left successor dari R, begitu juga
dengan T2 yang tidak hampa, disebut dengan right successor dari R.
Perhatikan diagram tree T sebagai berikut :
A
B
D
C
E G
J
K
F
L
Gambar 1. Pohon T.
Pohon T tersebut : (1) memiliki 11 nodes;
(2) Nodes A disebut dengan root, posisi teratas dari diagram;
memiliki derajat masuk 0, dan derajat keluar  0;
(3) Nodes B disebut left successor dari A; C adalah right
successor dari A;
(4) Nodes B, D, E, dan F merupakan left substree dari A.
Nodes C, G, H, J, K, dan L merupakan right substree dari
A.
Setiap nodes dari tree T memiliki (derajat keluar) 0, 1, atau 2 successor. Nodes
yang tidak memiliki successor (derajat masuk = 1, dan derajat keluar = 0),
disebut terminal nodes, yang biasa diistilahkan dengan leaf (daun). Pohon biner
T dan T’ dikatakan sama (similar) bila memiliki struktur yang sama, meskipun
dengan elemen yang berbeda. Jika elemennya sama juga, maka keduanya
disebut salinan (copies).
Perhatikan penggambaran diagram pohon biner atas ekspresi aljabar sebagai
berikut : E = ( a - b ) / (( c * d ) + e )
Langkah-langkahnya adalah :
(1) sederhanakan bentuk ekspresi tersebut hingga menjadi 2 operand, 1
operator. Perhatikan pula kaidah operasi (derajat operator) matematisnya.
E = ( a - b ) / (( c * d ) + e )
x
/ (y
+ e)
z
Soalnya menjadi : E = x / z
Diagramnya :
/
x
z
(2) Transformasikan kembali ke soal sebelumnya :
x = a - b, diagramnya menjadi :
/
-
z
a
b
z = y + e, diagramnya menjadi :
/
-
+
a
e
b y
y = c * d, diagram akhirnya menjadi :
/
-
+
a
b
c
e
*
d
Gambar 2. Pohon E
Terminologi pohon: Bila sebuah pohon diibaratkan sebuah keluarga, maka
perhatikan gambar 1 di atas :
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
B adalah parent (orang-tua) atau father (ayah) dari D dan E (disebut juga
dengan predecessor). Sebaliknya, D adalah left child (anak kiri), dan E
adalah right child (anak kanan) dari B;
D dan E disebut siblings (brother) atau bersaudara;
Setiap garis yang menghubungkan antara satu node dengan node lain
disebut dengan ruas (edge);
Edge-edge yang saling berhubungan dan membentuk satu jalur disebut
dengan path;
Path yang berakhir di leaf disebut dengan branch.
Tingkatan (level) pohon dimulai dengan 0 pada root-nya dan seterusnya
bertambah 1 di setiap keturunannya (descendant);
Setiap nodes yang berada pada tingkatan yang sama disebut dengan satu
generasi (generasi yang sama);
Ketinggian (height) atau kedalaman (depth) sebuah pohon adalah nilai
maksimum dari banyaknya nodes dalam suatu branch, atau bernilai sama
dengan level + 1 dari pohon tersebut.
Pohon komplet (complete tree) :
Pohon komplet T26 adalah pohon yang terdiri dari 26 nodes, yang didiagramkan
secara urut dari atas ke bawah, dan dari kiri ke kanan, dan setiap ayah maksimal
memiliki 2 anak. Berikut contoh pohon komplet T 5.
1
2
4
3
5
Gambar 3. Pohon Komplet T5
Pada pohon komplet tersebut, bila K adalah sebuah nodes, maka nodes ayah
akan memiliki nodes anak-anaknya dengan rumus (K * 2) untuk anak kiri, dan (K
* 2 + 1) untuk anak kanan. Sebaliknya nodes anak akan memiliki nodes ayahnya
dengan rumus K/2, atau INT(K/2).
Di setiap tingkat (level), memiliki nodes maksimal sebanyak 2n, di mana n =
level. Kedalaman/ ketinggian (Dn) sebuah pohon komplet (Tn) dihitung dengan
rumus :
Dn = [ log2n + 1]
Jadi, jika kita memiliki pohon komplet dengan jumlah nodes sebanyak
1.000.000, maka ketinggian/ kedalaman pohon tersebut = 21.
Adapun ketinggian minimum pohon biner secara umum rumusnya :
Dmin = log2n + 1
dan ketinggian maksimumnya adalah sejumlah banyaknya simpul (nodes).
Sebuah pohon biner dikatakan memiliki ketinggian seimbang bila substree kiri
dan substree kanannya hanya berbeda maksimal 1 tingkat (1 level).
Extended Binary Trees : 2-Trees
Extended binary trees diciptakan untuk melakukan operasi yang bersifat
matematis. Pohon biner dapat dijadikan extended binary trees dengan cara
membuat setiap nodesnya terdiri dari 0 atau 2 anak.
Setiap nodes di pohon biner yang memiliki 2 anak disebut dengan internal
nodes, dan yang memiliki 0 anak disebut external nodes. Perhatikan gambar
4(a), pohon biner T yang ‘dikonversi’ menjadi pohon-2, di mana setiap nodesnya
dibuat (ditambahkan) agar memiliki 0 atau 2 anak.
Gambar 4(a). Pohon Biner T
Gambar 4(b). Extended 2-Trees
Penyajian Binary Tree di Dalam Memori Komputer
Penyajian pohon biner di memori ada dua cara, yaitu penyajian kait (link/ linked
list), dan array tunggal (sequential).
Untuk penyajian kait, lihat di gambar 7-11 sampai 7-14 di buku paket.
Sedangkan untuk penyajian array tunggal dapat dilihat di gambar 7-15, dan 7-16
di buku yang sama.
Pengalihan Pohon Umum (General Trees) ke Pohon Biner
Pohon umum tidak mengenal anak kiri atau anak kanan, sehingga T’ akan sama
dengan T, sedangkan pada pohon biner, T’, belum tentu sama dengan T-nya.
Perhatikan T dan T’ untuk pohon biner berikut ini.
a
b
a
c
c
b
d
d
Gambar 5(a). Pohon Biner T
Gambar 5(b). Gambar Pohon Biner T’
Jelas, yang pada pohon biner T, simpul b yang merupakan anak kiri dari simpul
a, pada pohon biner T’, simpul b menjadi anak kanan dari simpul a. Sehingga T’
tidak sama dengan T. Hal ini tidak berlaku di pohon umum, jika gambar 5(a) dan
5(b) itu merupakan pohon umum, maka T’ = T.
Untuk mengalihkan pohon umum menjadi pohon biner, caranya :
(1) Dari root ke kiri (atau ke level berikutnya jika hanya ada 1 kaitan),
digambarkan bertingkat ke kiri;
(2) Setiap nodes yang selevel (bersaudara) di pohon umum digambarkan
bertingkat ke kanan;
Contoh :
a
b
d
e
a
c
f
g
b
d
c
g
e
f
Gambar 6(a). Pohon Umum
Gambar 6(b). Hasil Konversi ke Pohon Biner
Penjelasan : nodes a, b, dan d digambar tetap (bertingkat ke kiri). Node b
memiliki saudara c, sehingga c digambarkan ke tingkat berikutnya di kanannya.
Node d punya saudara e dan f, sehingga e dan f digambarkan bertingkat ke
kanan. Node c memiliki kaitan dengan g (hanya 1 node), maka node g
digambarkan ke tingkat berikutnya di kiri..
Traversing Binary Trees (Rute Kunjungan)
Ada 3 cara standar untuk melakukan traversing dalam binary trees, yaitu inorder,
preorder, dan postorder.
Perhatikan diagram pohon biner R berikut ini :
+
-
/
a
b
e
^
c
d
Gambar 7. Pohon Biner R
Inorder :
(1) baca root trees; ** catatan : setiap simpul hanya dicetak 1 kali **
(2) bila belum pernah dikunjungi : kunjungi simpul kirinya sampai ke simpul kiri
paling akhir. Cetak sebagai hasil;
(3) kembali ke root substree(ke root tree bila substree kiri sudah selesai). Cetak
sebagai hasil;
(4) kunjungi simpul kanannya, bila simpul itu merupakan simpul eksternal, cetak
sebagai hasil, bila tidak, ulangi langkah 2.
(5) kembali ke root substrees di level sebelumnya. Cetak simpul itu;
(6) ulangi langkah 2
Hasil akhir : ( a - b ) + ( c ^ d ) / e
Kunjungan tersebut dapat diskemakan sebagai berikut :
+
-
/
a
mulai
e
b ^
c
d
Gambar 8. Skema Kunjungan Inorder.
Preorder :
(1) baca root trees; cetak simpul itu;
(2) kunjungi simpul kirinya, bila simpul itu merupakan root substreenya, maka
cetak simpul itu;
(3) ulangi proses (2) hingga simpul itu bukan merupakan simpul root substree.
(4) cetak simpul itu (terakhir kunjungan);
(5) kembali ke root substreesnya (bila sudah tidak ada lagi simpul di kiri dan
kanannya, kembali ke root di atasnya)
(6) bila masih ada simpul di kanannya, kunjungi simpul itu;
(7) ulangi langkah (2)
Hasil akhir = + - a b / ^ c d e
Skema kunjungan preorder :
mulai
+
-
/
a
e
b ^
c
d
Gambar 9. Skema Kunjungan Preorder.
Postorder :
(1) baca root trees;
(2) bila masih ada simpul di kirinya, kunjungi simpul itu;
(3) lakukan proses (2) hingga tidak ada lagi simpul di kirinya;
(4) cetak simpul itu (terakhir kunjungan);
(5) kembali ke root substreesnya (bila sudah tidak ada lagi simpul di kiri dan
kanannya, kembali ke root di atasnya)
(6) bila masih ada simpul di kanannya, kunjungi simpul itu;
(7) ulangi langkah (2)
Hasil akhir = a b - c d ^ e / +
+
-
/
a
c
mulai
e
b ^
d
Gambar 10. Skema Kunjungan Postorder
Catatan untuk melakukan pengecekan awal kunjungan yang benar :
Pada preorder : root trees berada di posisi awal
postorder : root trees di posisi paling akhir
Rumus awal : inorder = A + B
preorder = + A B
postorder = A B +
BINARY SEARCH TREES (POHON CARI BINER) :
Pohon cari biner adalah pohon biner yang dirancang untuk menskemakan
urutan data yang akan dimasukkan ke dalam memori agar proses pencarian,
penghapusan dan penambahan data dapat berjalan secara efisien dibanding
dengan pemasukan data secara array maupun link.
Sifat dari skema pohon cari biner adalah : (1) setiap elemen yang berada di left
substrees selalu lebih kecil dari elemen yang ada di right substrees, (2) setiap
elemen yang berada di right substrees selalu lebih besar atau sama dengan
elemen yang berada di left substrees.
Contoh : diketahui sekumpulan elemen sebagai berikut :
60, 75, 25, 50, 15, 66, 33, 44
Pembentukan awal skema pohon binernya berturut-turut sebagai berikut :
60
60
(a)
60
75
60
25
75
(b)
25
(c)
75
50
(d)
Gambar 11. Pembentukan Awal Pohon Cari Biner
dan, hasil akhirnya sebagai berikut :
60
25
15
75
50
66
33
44
Gambar 12. Pohon Cari Biner
Penghapusan pada pohon cari biner :
Penghapusan sebuah elemen pada pohon cari biner dilakukan sebagai berikut :
(1) untuk elemen yang tidak memiliki anak, elemen tersebut tinggal dihilangkan
saja;
(2) untuk elemen yang hanya memiliki satu anak, posisi elemen tersebut
digantikan dengan anaknya, dan posisi elemen anaknya dihapus;
(3) untuk elemen yang memiliki dua anak, ambil elemen yang merupakan
substree kanannya secara inorder (elemen yang tidak memiliki anak kiri lagi),
letakkan di elemen yang dihapus. Posisi elemen yang dipindahkan tadi
ditempati anaknya;
Untuk lebih jelasnya, berikut pohon cari biner yang ada pada gambar 12 yang
dihapus untuk masing-masing elemen: (a) 44, (b) 75, dan (c) 25.
60
60
25
15
75
50
25
66
15
66
50
33
33
44
(a) elemen 44 dihapus
(b) elemen 75 dihapus
60
33
15
75
50
66
44
(c) elemen 25 dihapus.
Gambar 13. Penghapusan Pohon Cari Biner.
Penyisipan elemen pada pohon cari biner :
Prinsipnya hampir sama dengan pembentukan pohon cari biner, tapi yang ini,
elemen lain sudah terbentuk, sehingga tinggal mencari posisi yang sesuai
dengan sifat dari pembentukan skema pohon cari biner.
Sebagai contoh, skema di Gambar 12, akan disisipkan elemen : 79 dan 68.
Maka hasil akhir skemanya adalah :
60
25
15
75
50
33
66
79
68
44
Gambar 14. Penyisipan Elemen 79 dan 68 dari Gambar 12.
Cara manual :
Jika diketahui inorder, P = ( a + b ) / (c - d ) * e, maka pencarian preorder dan
postordernya adalah :
Penyederhanaan soal menjadi : ( a + b ) / (c - d ) * e
x / y
*e
z
*e
maka preordernya = * z e
karena z = x / y, yang preordernya = / x y
maka hasil gabungannya = * / x y e
Karena x = a + b, yang preordernya = + a b
maka hasil gabungannya = * / + a b y e
Karena y = c - d, yang preordernya = - c d
maka hasil akhirnya menjadi : * / + a b - c d e
Untuk cara yang sama, maka postordernya dari yang paling sederhana berturutturut menjadi : (1) z e *
(2) x y / e *
(3) a b + y / e *
(4) a b + c d - / e *
Diagram treenya :
*
/
e
+
a
b
c
Gambar 5. Binary Tree P
d
Download