Anda di halaman 1dari 38

Kode MK/ Pemrograman Terstruktur 2

ZK Abdurahman Baizal

KK Algoritma dan Komputasi

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

2 8/25/2015 IKG2A3/Pemrograman Terstruktur 2


Pohon Biner (Binary Tree)
Kumpulan simpul yang mungkin kosong atau mempunyai
akar dan dua subpohon yang saling terpisah (left subtree
dan right subtree)
Derajat maksimal = 2
Complete binary tree tingkat N : pohon biner yang semua
daunnya terdapat pada tingkat N dan semua simpul yang
lebih kecil dari Npasti mempunyai cabang kiri dan kanan
– Banyak simpul maksimum pada tingkat N = 2N-1
– Banyak simpul maksimum sampai tingkat N = 2 N -1
Skewed binary tree : pohon biner yang banyaknya simpul
cabang kiri tidak seimbang dengan banyak simpul cabang
kanan

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

Function Akar (P:BinTree)  infotype


{mengirimkan infomasi yang tersimpan dalam akar dari
pohon biner yang tidak kosong}
KAMUS
ALGORITMA
 info(P)

6 8/25/2015
Beberapa Primitive Pada Tree

Function AnakKiri(P:BinTree)  infotype


{mengirimkan anak kiri dari pohon biner yang
tidak kosong}
KAMUS
ALGORITMA
 Left(P)

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

procedure MakeTree(input A:Infotype, L: BinTree, R


:BinTree;
output P :BinTree)
{IS : sembarang}
{FS : Menghasilkan sebuah pohon P dari A, L dan R }
KAMUS
ALGORITMA
Info(P)  A
Left(P)  L
Right(P)  R

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

Procedure PopStack (Input/Output S : Stack; Output E : BinTree)


{I.S : stack tidak kosong}
{F.S : elemen TOP disimpan pada E, alamat Top yang lama
didealokasi}
{Menghspus elemen stack, stack tidak boleh kosong dan mungkin
seteleh penghapusan stack menjdai kosong}
Kamus
Q : addressS
Algoritma
If (S <> Nil) then
Q  TOP(S)
E  Info(S)
TOP(S)  Next (TOP(S))
Dealokasi (Q)

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.

Dalam pohon pencarian biner, setiap simpul dilabelkan


dengan kunci (atau data itu sendiri). Kunci adalah nilai yang
membedakan setiap simpul dengan simpul lainnya, sehingga
setiap kunci harus unik.

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

4. Buat procedure untuk mencari nilai minimum pada BST


Procedure Tree-Minimum (input P : bintree, output Pmin: address)

5 . Buat procedure untuk mencari nilai maksimum pada BST


Procedure TreeMinimum (input P : bintree, output Pmax: 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)

Procedure TreeSuccessor (input P : bintree, output Psucc : address)

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)

Procedure TreePredecessor (input P : bintree, output Ppred : address)

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

Anda mungkin juga menyukai