1. www.hansmichael.com - Bab X. Konsep Dasar Tree
BAB X
Konsep Dasar Tree
10.1 Definisi Tree
10.2 Representasi dari Tree
10.3 Istilah-istilah dalam Tree
10.4 Binary Tree
10.5 Representasi Binary Tree
10.6 Traversal pada Binary Tree
10.7 Latihan Soal
Setelah mempelajari struktur data linier pada bab-bab sebelumnya (stack,
queue, dan linked list), maka pada bab ini akan dipelajari mengenai struktur data
non linier, yaitu TREE. Contoh dari sebuah struktur tree dapat dilihat dalam
kehidupan sehari-hari seperti silsilah keluarga atau struktur organisasi dari suatu
perusahaan.
10.1 Definisi Tree
Secara sederhana tree dapat didefinisikan sebagai kumpulan elemen yang
salah satu elemennya disebut root, dan sisa elemen yang lain (yang disebut node)
terpecah menjadi sejumlah himpunan yang saling tidak berhubungan satu sama
lain (disjoint), yang disebut dengan subtree. Node yang tidak mempunyai cabang
disebut terminal node atau leaf, sedangkan node yang mempunyai cabang disebut
branch node. Jumlah node pada sebuah tree merupakan bilangan terbatas (finite
number).
Apabila diamati pada setiap subtree, akan terlihat bahwa subtree pun
mempunyai root dan subtree-subtree, dengan kata lain juga merupakan sebuah
tree. Dengan pengertian tersebut, maka tree dapat didefinisikan secara rekursif
sebagai berikut:
? Sebuah node tunggal adalah tree.
? Jika terdapat sebuah node N dan beberapa subtree T1, T2, T3, ..., Tk yang tidak
saling berhubungan, dan berakar pada node-node N1, N2, N3, ..., Nk, maka dari
84
2. www.hansmichael.com - Bab X. Konsep Dasar Tree 85
node N dan subtree-subtree ini dapat dibentuk sebuah tree yang berakar pada node
N.Contoh:
? Tree dengan 12 node dan root N0
T1 = {N1, N2, N3, N4, N5, N6}
T2 = {N7}
T3 = {N8, N9, N10}
? T1 merupakan tree dengan root N1
T11 = {N2}
T12 = {N3}
T13 = {N4, N5, N6}
? T2 merupakan tree dengan root N2
? T3 merupakan tree dengan root N3
T31 = {N9}
T32 = {N10, N11}
? T13 merupakan tree dengan root N4
T131 = {N5}
T132 = {N6}
? T32 merupakan tree dengan root N10
T321 = {N11}
N0
N1 N7 N8
N2 N3 N4 N9 N10
N5 N6 N11
Gambar 10.1
Representasi Tree
3. www.hansmichael.com - Bab X. Konsep Dasar Tree 86
10.2 Representasi dari Tree
Ada beberapa cara untuk menggambarkan sebuah tree, yaitu:
1. Pedigree chart
N0
N1 N5 N6
N2 N3 N4 N7 N8
2. Lineal chart N2
N1 N3
N4
N0 N5
N7
N6
N8
3. Diagram Venn atau Nested Sets
N0
N5
N2 N3
N6 N7 N8
N1 N4
4. Nested parentheses
(N0 (N1 (N2) (N3) (N4)) (N5) (N6 (N7) (N8)))
4. www.hansmichael.com - Bab X. Konsep Dasar Tree 87
5. Bar chart
N0
N1
N2
N3
N4
N5
N6
N7
N8
6. Level-number notation
1 N0
2 N1
3 N2
3 N3
3 N4
2 N5
2 N6
3 N7
3 N8
10.3 Istilah-Istilah dalam Tree
Dalam mempelajari struktur data non linier ini, akan ditemui banyak istilah-
istilah yang dipergunakan untuk menyajikan sebuah tree. Berikut ini akan dibahas
istilah-istilah yang sering digunakan dalam tree.
10.3.1 Level (Tingkat)
Level sebuah node adalah satu ditambah panjang path dari root ke node
tersebut, sehingga level root selalu satu. Jika suatu node terletak pada level N,
maka node-node yang merupakan child-nya terletak pada level N +1. Sebagai
contoh, berikut ini diperlihatkan sebuah tree (12 node) lengkap dengan nomor
level untuk setiap nodenya.
5. www.hansmichael.com - Bab X. Konsep Dasar Tree 88
Level/Tingkat
N0 1
N1 N7 N8 2
N2 N3 N4 N9 N10 3
N5 N6 N11 4
Gambar 10.2
Level pada Tree
Selain definisi di atas, ada juga beberapa buku yang menyatakan bahwa root
dinyatakan sebagai level 0, dan node-node lainnya dinyatakan sebagai level 1
lebih tinggi dari parent-nya. Buku ini menggunakan definisi yang pertama, yaitu
bahwa root dikatakan berlevel 1.
10.3.2 Degree (Derajat)
Dikenal dua macam degree/derajat dari sebuah node yaitu:
1. Out-degree (atau sering disebut degree) yaitu jumlah subtree dalam node
tersebut. Degree dari leaf atau terminal node selalu nol.
2. In-degree yaitu jumlah path yang masuk ke dalam node tersebut. In-degree
dari root selalu nol dan untuk node-node lainnya selalu satu.
Contoh:
Dari gambar tree di atas:
? Node N0 mempunyai out-degree = 3 dan in-degree = 0.
? Node N1 mempunyai out-degree = 3 dan in-degree = 1.
? Node N2 mempunyai out-degree = 1 dan in-degree = 1.
? Node N3 mempunyai out-degree = 1 dan in-degree = 1.
? Node N4 mempunyai out-degree = 2 dan in-degree = 1.
? dan seterusnya.
6. www.hansmichael.com - Bab X. Konsep Dasar Tree 89
Leaf sering disebut sebagai external node (node luar), sedangkan node-node
selain leaf dan root disebut internal node (node dalam).
10.3.3 Height (Tinggi) atau Depth (Kedalaman)
Tinggi atau kedalaman dari suatu tree adalah level maksimum dari node
dalam tree tersebut dikurangi satu. Untuk contoh tree di atas, tinggi tree tersebut
adalah 4 - 1 = 3, karena level maksimumnya adalah 4.
10.3.4 Ancestor dan Descendant
Ancestor suatu node yaitu semua node yang terletak dalam satu jalur dengan
node tersebut dari root sampai node yang ditinjau. Sebagai contoh, ancestor dari
node N6 adalah N0, N1, dan N4.
Descendant suatu node yaitu semua node yang dapat dicapai dari node
tersebut. Sebagai contoh, descendant dari node N1 adalah N2, N3, N4, N5, dan N6.
10.3.5 Parent (Father) dan Child (Son)
Parent suatu node adalah sebuah node yang dapat mencapai node tersebut
dengan path tunggal. Sebagai contoh, parent dari N2 adalah N1, parent dari N5
adalah N4, parent dari N10 adalah N8, dan sebagainya.
Child suatu node adalah semua node yang dapat dicapai oleh node tersebut
dengan sebuah path saja. Sebagai contoh, child dari N1 adalah N2, N3, dan N4;
child dari N4 adalah N5 dan N6; dan sebagainya.
10.3.6 Forest
Forest adalah kumpulan tree yang tidak saling berhubungan (disjoint). Jika
pada tree di atas, node N0 dihapus menyebabkan terjadi sebuah forest dengan tiga
tree (dapat dilihat pada gambar berikut ini).
N1 N7 N8
N2 N3 N4 N9 N10
N5 N6 N11
Gambar 10.3
Forest
7. www.hansmichael.com - Bab X. Konsep Dasar Tree 90
10.3.7 Ordered Tree
Definisi ordered tree yaitu:
? Sebuah tree yang di dalamnya terdapat aturan untuk menyusun node-node
dalam level yang sama, atau
? Sebuah tree dimana setiap subtree pada semua node di dalamnya membentuk
himpunan yang berurutan (ordered set).
Urutan node-node dapat bersifat ascending (urut naik) dan dapat pula
bersifat descending (urut turun). Gambar 10.4 merupakan contoh dari non-ordered
tree dan ordered tree.
B
tidak urut
Y A Z
C I H J P
O N X
(a)
B
urut
A Y Z
C H I J P
N O X
(b)
Gambar 10.4
Non-Ordered Tree (a) dan Ordered Tree (b)
10.3.8 m-ary Tree
m-ary tree adalah tree yang out-degree setiap node di dalamnya lebih kecil
atau sama dengan m. Apabila m = 2, maka disebut dengan binary tree. Untuk
contoh ordered tree di atas, juga dapat dikatakan sebagai 3-ary tree.
8. www.hansmichael.com - Bab X. Konsep Dasar Tree 91
10.3.9 Balance Tree
Balance tree yaitu tree dimana leaf-leafnya terletak pada level h dan h-1,
sehingga jarak antara sebuah leaf dan leaf terbawah paling banyak 1. Contoh
balance tree adalah AVL-tree dan B-tree yang akan dibahas pada bab XIII dan
bab XV. Gambar 10.5 merupakan contoh balance tree dan non-balance tree.
D D
B F F
A C G E G
(a) (b)
Gambar 10.5
Balance Tree (a) dan Non-Balance Tree (b)
10.3.10 Complete m-ary Tree dan Full m-ary Tree
Complete m-ary tree yaitu suatu m-ary tree yang out-degree setiap node di
dalamnya sama dengan nol (merupakan leaf) atau sama dengan m. Sedangkan full
m-ary tree adalah complete m-ary tree dimana leaf-leafnya terletak pada level
yang sama.
10.4 Binary Tree
Setelah mengetahui tree secara umum, maka untuk selanjutnya fokus
pembahasan akan diarahkan pada tree yang hanya mempunyai dua buah subtree
saja (subtree kiri dan subtree kanan) yang disebut sebagai binary tree.
10.4.1 Konsep Dasar Binary Tree
Binary tree adalah himpunan dengan jumlah terbatas yaitu m buah node
(m − 0), yang selain kosong (m = 0) hanya dapat berisi sebuah node root yang
memiliki dua buah subtree yang masing-masing disebut SUB BINARY TREE
KIRI dan SUB BINARY TREE KANAN. Jika m = 0 maka disebut EMPTY
BINARY TREE.
10.4.2 Konversi dari General Tree ke Binary Tree
Apabila suatu general tree dapat dinyatakan sebagai binary tree, maka perlu
dilakukan proses konversi dari general tree ke binary tree. Gambar di bawah ini
9. www.hansmichael.com - Bab X. Konsep Dasar Tree 92
memperlihatkan urutan proses konversi struktur general tree menjadi struktur
binary tree.
B B
A
A Y Z
C Y
C H I J P
H Z
N O X
I J
I II
N P
O X
B
A Z
Y
H
J P
C I
X
N O
Gambar 10.6
Konversi General Tree ke Binary Tree
Dari gambar 10.6 terlihat bahwa terdapat dua tahap konversi yaitu:
? Tahap pertama yaitu menghapus semua cabang (branch) yang terhubung pada
setiap node kecuali cabang yang paling kiri. Selanjutnya menghubungkan
semua node pada level yang sama dengan branch.
? Tahap kedua yaitu mengubah menjadi binary tree dimana branch kiri adalah
branch yang vertikal dan branch kanan adalah branch yang horisontal.
Proses konversi ini dapat pula diterapkan untuk mengkonversi sebuah forest
menjadi binary tree, dan dapat dilihat pada contoh gambar 10.7.
10. www.hansmichael.com - Bab X. Konsep Dasar Tree 93
A G
B E H I J
C D F C D
I
A G
B E H I J
C D F C D
II
A
B G
C E H
D F I
J
C
Gambar 10.7 D
Konversi Forest ke Binary Tree
10.5 Representasi Binary Tree
Apabila diperhatikan node-node dalam binary tree, maka akan terlihat
bahwa dalam setiap node secara umum selalu terdiri dari dua buah pointer untuk
menunjukkan subtree kiri dan subtree kanan, serta informasi yang akan disimpan
dalam node tersebut. Struktur penyimpanan informasi ini terbagai menjadi:
11. www.hansmichael.com - Bab X. Konsep Dasar Tree 94
10.5.1 Representasi Penyimpanan Linked
Cara pertama adalah penyimpanan node secara linked, dalam arti
menggunakan tipe data pointer. Pada cara ini, struktur node akan disajikan
sebagai berikut:
LPtr Info RPtr
Jika struktur node tersebut diimplementasikan ke dalam Pascal, maka
deklarasi node yang sesuai adalah:
1: TYPE
2: BinTreeType = ^BinNodeType;
3: BinNodeType = RECORD
4: LPtr : BinTreeType;
5: Info : BinInfoType;
6: RPtr : BinTreeType;
7: END;
Gambar 10.8 adalah binary tree dan representasinya dalam penyimpanan
secara linked. Pointer T menunjukkan alamat dari node root, sedang subtree yang
kosong diwakili dengan pointer yang bernilai NIL.
A T
B F A
C E G H
B F
D
C E G H
F
Gambar 10.8
Binary Tree dan Representasi dalam Linked List
10.5.2 Representasi Penyimpanan Threaded
Pada representasi secara linked dapat disimpulkan bahwa apabila pada
sebuah binary tree terdapat n buah node, maka jumlah pointer nil adalah n + 1
buah dari total pointer adalah 2n buah. Hal ini merupakan pemborosan tempat,
12. www.hansmichael.com - Bab X. Konsep Dasar Tree 95
dan pada representasi penyimpanan threaded, pointer nil diganti dengan thread
link. Pembahasan lebih lanjut mengenai threaded terdapat pada bab XII.
10.5.3 Representasi Penyimpanan Sekuensial
Telah diketahui bahwa tidak semua bahasa pemrograman mempunyai tipe
data pointer (linked allocation), sehingga perlu diketahui pula representasi binary
tree dengan menggunakan sequential allocation (array).
Dalam representasi ini, perlu dipersiapkan dahulu sebuah array satu dimensi
(vektor). Jumlah elemen maksimum array ditentukan berdasarkan jumlah node
dari sebuah full binary tree dengan suatu ketinggian tertentu. Apabila tinggi
sebuah full binary tree adalah h, maka jumlah node pada binary tree tersebut
adalah 2h + 1 - 1. Misalkan terdapat sebuah full binary tree dengan tinggi = 5, maka
jumlah nodenya = 26 - 1 = 64 - 1 = 63 buah.
Setelah mempersiapkan vektor sebagai media penyimpan binary tree,
selanjutnya perlu diperhatikan aturan-aturan penempatan node pada vektor yaitu
sebagai berikut:
1. Elemen pertama vektor adalah root.
2. Child kiri dari elemen vektor ke-i adalah elemen vektor ke-2i dan child kanan
dari elemen vektor ke-i adalah elemen vektor ke-(2i + 1).
Dengan memperhatikan aturan tersebut, maka binary tree seperti contoh
pada representasi linked, apabila disajikan dalam bentuk array maka menjadi
seperti gambar berikut ini:
Posisi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Info A B F C E G H - D - - - - - -
10.6 Traversal pada Binary Tree
Proses traversal adalah proses melakukan kunjungan pada setiap node pada
suatu binary tree tepat satu kali. Dengan melakukan kunjungan secara lengkap,
maka akan didapatkan urutan informasi secara linier yang tersimpan dalam sebuah
binary tree. Terdapat tiga cara untuk melakukan kunjungan itu, yaitu:
1. Traversal preorder (depth first order)
Dilaksanakan dengan jalan mencetak isi node yang dikunjungi lalu melakukan
kunjungan ke subtree kiri dan selanjutnya ke subtree kanan.
Algoritma umum traversal preorder adalah sebagai berikut:
13. www.hansmichael.com - Bab X. Konsep Dasar Tree 96
? Jika tree kosong, maka keluar.
? Proses node root.
? Traverse subtree kiri secara preorder.
? Traverse subtree kanan secara preorder.
2. Traversal inorder (symmetric order)
Dilaksanakan dengan jalan melakukan kunjungan ke subtree kiri, mencetak isi
node yang dikunjungi, lalu melakukan kunjungan ke subtree kanan.
Algoritma umum traversal inorder adalah sebagai berikut:
? Jika tree kosong, maka keluar.
? Traverse subtree kiri secara inorder.
? Proses node root.
? Traverse subtree kanan secara inorder.
3. Traversal postorder
Dilaksanakan dengan jalan melakukan kunjungan ke subtree kiri, lalu ke
subtree kanan, dan selanjutnya mencetak isi node yang dikunjungi.
Algoritma umum traversal inorder adalah sebagai berikut:
? Jika tree kosong, maka keluar.
? Traverse subtree kiri secara postorder.
? Traverse subtree kanan secara postorder.
? Proses node root.
Semua algoritma traversal (preorder, inorder, postorder) yang diberikan di
atas berupa algoritma rekursif, dan sebenarnya dapat dikerjakan secara iteratif
dengan bantuan stack.
Contoh: diberikan ekspresi matematika ((A * B) - (C ^ D)) + (E / F), apabila
digambarkan dalam bentuk binary tree menjadi seperti gambar 10.9.
14. www.hansmichael.com - Bab X. Konsep Dasar Tree 97
+
- /
* ^ E F
A B C D
Gambar 10.9
Representasi Ekspresi Matematika dalam Binary Tree
Apabila binary tree di atas dikunjungi:
? secara preorder akan menghasilkan: +-*AB^CD/EF
? secara inorder akan menghasilkan: A*C-C^D+E/F
? secara postorder akan menghasilkan: AB+CD^-EF/+
10.7 Latihan Soal
1. Tentukan level dan degree dari masing-masing node dalam tree yang ada pada
gambar 10.10.
A
B K
C F G
D E H J
I L M
Gambar 10.10
Non Binary tree
2. Gambarkan bentuk tree pada soal no.1 dengan diagram Venn, nested
parentheses, bar chart dan level-number notation.
3. Ubahlah ordered tree pada soal no. 1 menjadi sebuah binary tree.
15. www.hansmichael.com - Bab X. Konsep Dasar Tree 98
4. Bagaimanakah representasi sekuensial dari binary tree jawaban soal no. 3?
Sebelumnya tentukan dahulu tinggi maksimum dari binary tree yang dapat
direpresentasikan dalam array tersebut.
5. Lakukanlah proses traversal preorder, inorder dan postorder pada binary tree
jawaban soal no. 3.
6. Buatlah tiga buah procedure iteratif untuk melakukan traversal inorder,
preorder dan postorder pada sebuah binary tree.
7. Buatlah sebuah procedure untuk melakukan traversal level order (berdasarkan
level dari tree tersebut) pada sebuah binary tree dengan bantuan stack atau
queue.
8. Buatlah sebuah function untuk mengembalikan jumlah node pada sebuah
binary tree.
9. Buatlah sebuah function untuk mengembalikan ketinggian dari sebuah binary
tree.
10. Buatlah tiga buah function untuk mengembalikan status (benar atau salah)
apakah suatu binary tree merupakan balance tree, complete binary tree, full
binary tree.
11. Gambarkan binary tree yang dimaksud:
a) Traversal preorder pada sebuah binary tree menghasilkan urutan `A B C D
E F G H I¨, sedangkan traversal inorder-nya menghasilkan urutan `C D E
B F A I H G¨.
b) Traversal postorder pada sebuah binary tree menghasilkan urutan `E D A
C G F B H¨, sedangkan jumlah child untuk masing-masing node adalah
sebagai berikut: A = 1, B = 2, C = 0, D = 1, E = 0, F = 1, G = 0 dan H = 2.
12. Buatlah sebuah program untuk mengkonversi antar ketiga notasi ekspresi
matematika (prefix, infix dan suffix) dengan menggunakan binary tree.