ZK Abdurahman Baizal
Tree
(Pohon)
1 8/25/2015
Pendahuluan
Dalam bab ini kita akan khusus membahas
mengenai binary tree
Pembahasan tentang tree beserta definisinya,
sudah dibahas pada matakuliah Matematika
Diskrit
Binary tree adalah kasus khusus dari tree, yang
banyak digunakan sebagai struktur data dalam
dunia pemrograman
3 8/25/2015
A
B C
Pohon Biner D E G H
I J K L M
N O
A A A
Bukan Pohon Biner
B C B C B C
D E F G H D E G H D C
I J K L M I J I E
K M
N O I I
N O
A B C
4 8/25/2015
Representasi Logic Pohon Biner
Kamus Umum
Type Infotype : ............{terdefinisi}
Type address : ^Node
Type Node : < Info : Infotype,
Left : address,
Right : address >
Type BinTree : address
5 8/25/2015
Beberapa Primitive Pada Tree
6 8/25/2015
Beberapa Primitive Pada Tree
7 8/25/2015
Beberapa Primitive Pada Tree
Function AnakKanan(P:BinTree) infotype
{mengirimkan anak kanan dari pohon biner
yang tidak kosong}
KAMUS
ALGORITMA
Right(P)
8 8/25/2015
Beberapa Primitive Pada Tree
function Tree(A:Infotype, L: BinTree, R :BinTree)
BinTree
{Menghasilkan sebuah pohon Biner dari A, L dan R jika
alokasi berhasil}
{Menghasilkan pohon kosong jika alokasi gagal}
KAMUS
P :BinTree
ALGORITMA
Allocate(P)
Info(P) A
Left(P) L
Right(P) R
P
9 8/25/2015
Beberapa Primitive Pada Tree
10 8/25/2015
Beberapa Primitive Pada Tree
function SimpulBaru(A:Infotype) address
{Menghasilkan sebuah simpul baru yang berisi
informasi A jika alokasi berhasil}
KAMUS
B : address
ALGORITMA
Allocate(B)
Info(B) A
Left(B) Nil
Right(B) Nil
B
11 8/25/2015
Beberapa Primitive Pada Tree
function IsUnerLeft(P:BinTree) boolean
{Prekondisi : P tidak kosong. Mengirmkan True jika P
adalah pohon unerleft: hanya mempunyai SubPohon Kiri}
KAMUS
ALGORITMA
Right(P)=Nil and Left(P) Nil
12 8/25/2015
Beberapa Primitive Pada Tree
function IsUnerRight(P:BinTree) boolean
{Prekondisi : P tidak kosong. Mengirmkan
True jika P adalah pohon unerright: hanya
mempunyai SubPohon Kanan}
KAMUS
ALGORITMA
Leftt(P)=Nil and Right(P) Nil
13 8/25/2015
Beberapa Primitive Pada Tree
function IsNotEmptyBin(P:BinTree) boolean
{Mengirmkan True jika pohon biner tidak kosong, P
adalah pohon biner : mempunyai SubPohon Kiri dan
Kanan}
KAMUS
ALGORITMA
Leftt(P) Nil and Right(P) Nil
14 8/25/2015
Kunjungan pada Pohon Biner (traversal)
Dalam operasi traversal, akan diperoleh secara
lengkap informasi yang disimpan pada suatu
pohon biner.
Urutan Informasi ini sangat tergantung pada letak
simpul-simpul pada pohon biner tersebut.
Jenis traversal pada pohon biner :
– Pre Order
– In Order
– Post Order
15 8/25/2015
Kunjungan pada Pohon Biner (traversal)
Kunjungan PreOrder :
A ABDIEJKCGLMNOH
Kunjungan InOrder :
B C IDBJEKALGNMOCH
Kunjungan PostOrder:
D E G H
IDJKEBLNOMGHCA
I J K L M
N O
16 8/25/2015
Kamus Umum
KAMUS
Type Infotype : ............{terdefinisi}
Type address : ^Node
Type Node : <Info : Infotype,
Left : address,
Right : address >
Type BinTree : address
Type addressS : ^ElmtStack
ElmtStack : < InfoS : BinTree,
Next : addressS >
Stack : < TOP : addressS >
17 8/25/2015
Primitive yang akan digunakan
Procedure Push (Input/Output S : Stack;
Input E : BinTree)
{Menambahkan sebuah elemen baru pada TOP, dengan
elemen yang diketahui informasinya}
Kamus
Q: addressS
Algoritma
Allocate (Q) {alokasi selalu berhasil}
Info(Q) E
{Insert sebagai elemen pertama}
Next (Q) TOP(S)
TOP(S) Q
18 8/25/2015
Primitive yang akan digunakan
19 8/25/2015
Preorder
Urutan traversal/kunjungan :
– cetak isi simpul
– kunjungi cabang kiri
– kunjungi cabang kanan
20 8/25/2015
Preorder Non Rekursif
Procedure PreOrder(Input P : BinTree)
{I.S : terdefinisi Binary Tree P, mungkin kosong}
{F.S : Mencetak informasi yang disimpan dalam binary Tree P secara PreOrder,
non rekursif}
Kamus
S : Stack
Q : BinTree
Algoritma
If P = Nil then
Output (‘Tree Kosong’)
Else
S Nil {Inisialisasi tumpukan}
Push (S,P) {push simpul akar}
While (S <> Nil)
Pop(S,Q) {Pop Ujung Tumpukan}
While Q <> Nil
Output (Info(Q)) {kunjungan ke simpul, cetak}
If (Right(Q)) Nil then
{ada cabang kanan, push ke stack}
push(S,Right(Q))
Q Left(Q)
21 8/25/2015
Preorder Rekursif
Procedure PreOrder_Rekursif(Input P : BinTree)
{I.S : terdefinisi Binary Tree P, P mungkin kosong}
{F.S : Mencetak informasi yang disimpan dalam
binary Tree P secara PreOrder, rekursif}
Kamus
Algoritma
If (P Nil) then
Output (Info(P))
PreOrder_Rekursif(Left(P))
PreOrder_Rekursif(Right(P))
22 8/25/2015
Inorder
Urutan InOrder :
– kunjungi cabang kiri
– cetak simpul
– kunjungi cabang kanan
23 8/25/2015
Inorder Non rekursif
Procedure InOrder(Input P : BinTree)
{I.S : terdefinisi Binary Tree P, mungkin kosong}
{F.S : Mencetak informasi yang disimpan dalam binary Tree P secara InOrder, non
rekursif}
Kamus
S : Stack
Q : BinTree
Algoritma
If (P = Nil) then
Output (‘Tree Kosong’)
Else
S Nil {Inisialisasi Tumpukan}
Q P
Repeat
While (P Nil)
{bergerak terlebih dulu ke cabang kiri dgn mempush akar}
push(S,Q)
Q Left(Q)
{P = Nil}
{Mempop dan mencetak ujung tumpukan}
Pop(S,Q)
Output (Info(Q))
{Bergerak ke kanan}
Q Right(Q)
Until (S = Nil)
24 8/25/2015
Inorder Rekursif
Procedure InOrder_Rekursif(Input P : BinTree)
{I.S : terdefinisi Binary Tree P, P mungkin kosong}
{F.S : Mencetak informasi yang disimpan dalam binary
Tree P secara InOrder, rekursif}
Kamus
Algoritma
If (P Nil) then
InOrder_Rekursif(Left(P))
Output (Info(P))
InOrder_Rekursif(Right(P))
25 8/25/2015
Post Order
Urutan PostOrder :
– kunjungi cabang kiri
– kunjungi cabang kanan
– cetak simpul
26 8/25/2015
Postorder Rekursif
Procedure Order_Rekursif(Input P : BinTree)
{I.S : terdefinisi Binary Tree P, P mungkin kosong}
{F.S : Mencetak informasi yang disimpan dalam binary
Tree P secara PostOrder, rekursif}
Kamus
Algoritma
If (P Nil) then
PostOrder_Rekursif(Left(P))
InOrder_Rekursif(Right(P))
Output (Info(P))
27 8/25/2015
Latihan
Buatlah prosedur untuk traversal post order non
rekursif
28 8/25/2015
Binary Search Tree (BST)
Pencarian (searching) merupakan salah satu hal yang
penting dalam ilmu komputer. Permaslaahannya adalah
bagaimana mengimplementasikan algoritma pencarian yang
efisien. Pohon pencarian biner adalah salah satu alat yang
dapat menjamin hal ini.
29 8/25/2015
Binary Search Tree (BST)
Jika R adalah akar, dan semua kunci yang
tersimpan pada setiap simpul tidak ada yang
sama, maka
– Semua simpul pada subpohon kiri mempunyai kunci lebih
kecil dari kunci(R)
– Semua simpul pada subpohon kanan mempunyai kunci
dengan nilai lebih besar dari kunci(R)
30 8/25/2015
Contoh BST
Pohon BST untuk data masukan dengan urutan
sebagai berikut :
65, 34, 22, 45, 100, 120, 8
65
34 100
22 45 120
31 8/25/2015
Pencarian pada BST
Pencarian data dilakukan melalui kunci. Misal kita
akan mencari sebuah nilai, misal x. Jika kunci
pada akar tidak sama dengan x, pencarian
dilanjutkan pada subpohon kiri atau subpohon
kanan, tergantung apakah x lebih besar atau lebih
kecil dari kunci pada akar.
32 8/25/2015
Procedure Sisip_SimpulBaru(input A:infoype; input/output P:BinTree)
{IS : terdefinisi Ordered BinaryTree P, P mungkin kosong }
{FS : simpul baru berisi informasi A terdefinisi dan disisipkan pada Tree P}
KAMUS
Q,R,Baru : address
ALGORITMA
Baru SimpulBaru(A)
If (P = nil) then {P masih kosong}
P Baru
Else {P tidak kosong}
Q P {kedua pointer bantu menunjuk ke akar Tree P}
R P
{Mencari letak yang tepat untuk menyisipkan simpul baru}
while (A <> Info(Q) and R <> Nil)
Q R
If A < Info(Q) then {Mencari ke Cabang Kiri}
R Left(Q)
Else
R Right(Q) {Mencari ke Cabang Kanan}
If (A = Info(Q)) then {Informasi A sudah ada pd Tree P}
Output (‘simpul sudah ada’)
Else
If (A < Info(P)) then
Left(Q) Baru
Else
Right(Q) Baru
33 8/25/2015
Latihan
1. Carilah referensi tentang aturan menghapus
suatu node dalam BST, dan buat prosedur untuk
menghapus node
2. Buatlah sebuah BST sembarang, lihat apa yang
terjadi jika dilakukan traversal preorder, inorder
dan postorder pada BST yang anda buat
34 8/25/2015
Latihan
3. Buat function untuk mencari sebuah nilai x pada BST
function TreeSearch (P : bintree , x : integer) → address
35 8/25/2015
6. Buat procedure that returns the successor (nilai yang lebih besar dari
info(P), tapi paling dekat dengan info(P) ) of node P in BST, and NIL if info(P)
is the largest key /info in the tree. (hint : anda bisa memanfaatkan
procedure/fungsi yang sudah anda buat sebelumnya)
7. Buat procedure that returns the predecessor ( nilai yang lebih kecil dari info(P), tapi
paling dekat dengan info(P) ) of node P in BST, and NIL if info(P) is the smallest key
/info in the tree
(hint : anda bisa memanfaatkan procedure/fungsi yang sudah anda buat
sebelumnya)
36 8/25/2015
Referensi
Liem, Inggriani., Diktat Kuliah IF2181 Struktur
Data, ITB, 2003.
Munir, Rinaldi., Matematika Diskrit, Edisi Kedua,
Penerbit Informatika Bandung, Bandung, 2003
37 8/25/2015
THANK YOU
8/25/2015
38