Anda di halaman 1dari 13

TREE (POHON) PENDAHULUAN Kumpulan elemen yang salah satunya disebut Akar dan sisa elemen yang lain

n disebut simpul Merupakan bentuk struktur data tidak linier Biasanya digunakan untuk menggambarkan hubungan yang bersifat hierarkhi, seperti : - strukutur organisasi - pohon klasifikasi / silsilah - pohon sintaks / pohon ekspresi Jenis : Pedigree chart, Linear chart ISTILAH DASAR

TINGKAT

B D E F

C G H

Hubungan antar simpul : bapak, ,anak, paman, dll Tingkat (level) Derajat (degree) Simpul yang derajat = 0 disebut daun / leaf Tinggi (Height) /kedalaman (deepth) : tingkat maksimum 1 Ancestor : semua simpul yang terdapat pada jalur dari akar sampai simpul tersebut Forest (Hutan) : kumpulan sejumlah pohon yang tidak saling berhubungan

CARA PENULISAN POHON 1. menggambarkan bentuk pohon 2. diagram Venn


A G M L O C B D J KL E IL

3. Notasi kurung A ( B ( D ( I ), E ( J , K ) ) , C ( G ( M ( N , O ) , L ) , F , H ) ) 4. Notasi tingkat A B D I E J K C F G L M N O H

MACAM TREE : - Banyaknya anak : binary tree / pedigree chart & Non Binary Tree (N-ary)/Lineal Chart POHON BINER - Adalah 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 sismpul cabang kanan Contoh : a. Pohon Biner

A B D I J E K L N G M O C H

b. Bukan Pohon Biner

A B D I J E K F L N A C G M O H D B

A B H D I

C E G

C C

M I

N B

I C

REPRESENTASI POHON BINER Dengan Menggunakan List: Type Infotype : ............{terdefinisi} Type address : ^Node Type Node : < Info : Infotype, Left : address, Right : address > Type BinTree : address Primitif-Primitif Pohon Biner: { Selektor}
Function Akar (P:BinTree) infotype {mengirimkan infomasi yang tersimpan dalam akar dari pohon biner yang tidak kosong} KAMUS ALGORITMA info(P) Function AnakKiri(P:BinTree) infotype {mengirimkan anak kiri dari pohon biner yang tidak kosong} KAMUS ALGORITMA Left(P)

Function AnakKanan(P:BinTree) infotype {mengirimkan anak kanan dari pohon biner yang tidak kosong} KAMUS ALGORITMA Right(P)

Konstruktor
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 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

Menyisipkan satu simpul baru ke sebuah Tree P secara Non Rekursif:


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

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

Proses menyisipkan simpul Baru ke Pohon biner secara Rekursif :


Procedure Sisip_Rekursif(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 secara rekursif} KAMUS Baru : address ALGORITMA If (P = nil) then P SimpulBaru(A) Else If (Info(P)>A) then Sisip_Rekursif(Left(P),A) Else if (Info(P)< A) then

Sisip_Rekursif(Kanan(P),A) Else Output (simpul sudah ada)

{Predikat Penting}
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 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 function IsBin(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

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. Berdasarkan bagaimana traversal itu dilakukan terhadap pohon Biner, kita dapat mengelompokan operasi traversal ke dalam beberpa macam/jenis traversal pada pohon biner yaitu Pre Order(Deepth First Order), In Order, post Order dan Level Order.

Contoh diketahui Pohon Biner:

A B D I J E K L N G M O C H

Kunjungan PreOrder Kunjungan InOrder Kunjungan PostOrder Kunjungan LevelOrder

: ABDIEJKCGLMNOH : IDBJEKALGNMOCH : IDJKEBLNOMGHCA : ABCDEGHIJKLMNO

PreOrder (Deepth First Order) Urutan traversal/kunjungan : - cetak isi simpul - kunjungi cabang kiri - kunjungi cabang kanan
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 >

Kunjungan Preorder Non Rekursif


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 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) 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)

Contoh :
0

H
2

A
3

K C
6 7

Simpul yang dikunjungi 0 Left(0) = 1 Right(1) Pop Left(3)=4 Left(4) Pop Left(5) Pop Left(2)=6 Left(6) Pop

Tabel Tracing Program PreOrder Non Rekursif IsiSimpul Alamat yg Isi Stack dipush H Right(0) 2 A Right(1) 23 Nil 23 C Right(3) 25 B Nil 25 Nil 25 D Nil 2 Nil 2 K Right(2) 7 J Nil 7 Nil 7 L Nil

Karakter Tercetak H A C B D K J L

Kunjungan 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))

Contoh :
0

H
2

A
3

K C
6 7

Tingkat Prosedur Utama Utama 1 1 1 2 2 3 3 2 3 3 3

Tabel Tracing Program PreOrder Rekursif Pemanggilan Prosedur Isi Simpul Output(Info(0)) PreOrder_Rekursif (Left(0)) Output(Info(1)) PreOrder_Rekursif (Left(1)) Kembali ke tigkat Utama PreOrder_Rekursif (Right(1)) Output(Info(3)) PreOrder_Rekursif (Left(3)) C PreOrder_Rekursif (Left(4)) Kembali ke tingkat 2 PreOrder_Rekursif (Right(3)) Output(Info(5)) PreOrder_Rekursif (Left(5)) Kembali ke tingkat 2 PreOrder_Rekursif (Right(5)) Kembali ke tingkat 2 Kembali ke tingkat 1 Kembali ke tingkat Utama PreOrder_Rekursif (Right(0)) Output (Info(2)) PreOrder_Rekursif (Left(5)) Output (Info(6)) PreOrder_Rekursif (Left(6)) Kembali ke tingkat 1 PreOrder_Rekursif (Right(6)) Kembali ke tingkat 1 H A A Nil C C B B Nil D D Nil Nil H A

Karakter Tercetak

C B

Utama 1 1 2 2 2

K K J J Nil Nil

K J

1 2 2 2

PreOrder_Rekursif (Right(2)) Output (Info(7)) PreOrder_Rekursif (Left(7)) Kembali ke tingkat 1 PreOrder_Rekursif (Right(7)) Kembali ke tingkat 1 Kembali ke Tingkat Utama Selesai

L L Nil Nil

Kunjungan InOrder Urutan InOrder : - kunjungi cabang kiri - cetak simpul - kunjungi cabang kanan
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)

Kunjungan 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))

Kunjungan PostOrder Urutan PostOrder : - kunjungi cabang kiri - kunjungi cabang kanan - cetak simpul Kunjungan PostOrder Dengan 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))

Anda mungkin juga menyukai