4. Pohon (Tree)

22
1 4. Pohon (Tree) 4. Pohon (Tree) 4.1. Definisi Rekurens Dari Pohon 4.1. Definisi Rekurens Dari Pohon Sebuah pohon adalah himpunan terbatas Sebuah pohon adalah himpunan terbatas tidak kosong, dengan elemen yang tidak kosong, dengan elemen yang dibedakan sebagai berikut : dibedakan sebagai berikut : 1. 1. Sebuah elemen yang dibedakan dari Sebuah elemen yang dibedakan dari yang lain yang disebut sebagai yang lain yang disebut sebagai AKAR ( AKAR ( root root ) dari pohon ) dari pohon 2. 2. Elemen yang lain (jika masih ada) Elemen yang lain (jika masih ada) dibagi-bagi menjadi beberapa sub dibagi-bagi menjadi beberapa sub himpunan yang disjoint dan masing- himpunan yang disjoint dan masing- masing sub himpunan tersebut masing sub himpunan tersebut adalah pohon yang disebut sebagai adalah pohon yang disebut sebagai sub pohon dari pohon tersebut. sub pohon dari pohon tersebut.

description

4. Pohon (Tree). 4.1. Definisi Rekurens Dari Pohon Sebuah pohon adalah himpunan terbatas tidak kosong, dengan elemen yang dibedakan sebagai berikut : 1. Sebuah elemen yang dibedakan dari yang lain yang disebut sebagai AKAR ( root ) dari pohon - PowerPoint PPT Presentation

Transcript of 4. Pohon (Tree)

Page 1: 4. Pohon (Tree)

1

4. Pohon (Tree)4. Pohon (Tree)4.1. Definisi Rekurens Dari Pohon4.1. Definisi Rekurens Dari PohonSebuah pohon adalah himpunan terbatas tidak Sebuah pohon adalah himpunan terbatas tidak

kosong, dengan elemen yang dibedakan kosong, dengan elemen yang dibedakan sebagai berikut :sebagai berikut :

1. 1. Sebuah elemen yang dibedakan dari yang Sebuah elemen yang dibedakan dari yang lain yang disebut sebagai AKAR (lain yang disebut sebagai AKAR (rootroot) dari ) dari pohonpohon

2. 2. Elemen yang lain (jika masih ada) dibagi-Elemen yang lain (jika masih ada) dibagi-bagi menjadi beberapa sub himpunan yang bagi menjadi beberapa sub himpunan yang disjoint dan masing-masing sub himpunan disjoint dan masing-masing sub himpunan tersebut adalah pohon yang disebut sebagai tersebut adalah pohon yang disebut sebagai sub pohon dari pohon tersebut.sub pohon dari pohon tersebut.

Page 2: 4. Pohon (Tree)

2

Beberapa IstilahBeberapa Istilah1. 1. HutanHutan

Hutan adalah sequence (list) dari pohonHutan adalah sequence (list) dari pohon2.2. Simpul (Simpul (NodeNode))

Simpul adalah elemen dari pohon yang Simpul adalah elemen dari pohon yang memungkinkan akses pada sub pohon dimana memungkinkan akses pada sub pohon dimana simpul tersebut berfungsi sebagai Akarsimpul tersebut berfungsi sebagai Akar

3.3. Cabang Cabang Cabang adalah hubungan antara Akar dengan Cabang adalah hubungan antara Akar dengan sub pohonsub pohon

Page 3: 4. Pohon (Tree)

3

4.4. AyahAyahAkar dari sebuah pohon adalah Ayah dari Akar dari sebuah pohon adalah Ayah dari sub pohonsub pohon

5.5. AnakAnakAnak dari sebuah pohon adalah Sub pohonAnak dari sebuah pohon adalah Sub pohon

6.6. SaudaraSaudaraSaudara adalah simpul-simpul yang Saudara adalah simpul-simpul yang mempunyai Ayah yang samamempunyai Ayah yang sama

7.7. DaunDaunDaun adalah simpul terminal dari pohon. Daun adalah simpul terminal dari pohon. Semua simpul selain Daun adalah simpul Semua simpul selain Daun adalah simpul bukan terminalbukan terminal

Page 4: 4. Pohon (Tree)

4

8.8. Jalan (Jalan (PathPath))

Jalan adalah suatu urutan tertentu dari Jalan adalah suatu urutan tertentu dari CabangCabang

9.9. DerajatDerajat

Derajat sebuah pohon adalah banyaknya Derajat sebuah pohon adalah banyaknya anak dari dari pohon tersebut.anak dari dari pohon tersebut.

Jika sebuah simpul berderajat N disebut Jika sebuah simpul berderajat N disebut pohon N-airepohon N-aire

1 disebut pohon 1-aire/uner1 disebut pohon 1-aire/uner

2 disebut pohon 2-aire/biner2 disebut pohon 2-aire/biner

Page 5: 4. Pohon (Tree)

5

10.10. Tingkat (Level)Tingkat (Level)

Level pohon adalah panjangnya jalan dari Level pohon adalah panjangnya jalan dari Akar sampai dengan simpul yang Akar sampai dengan simpul yang bersangkutan. Panjang dari jalan adalah bersangkutan. Panjang dari jalan adalah banyaknya simpul yang dikandung pada banyaknya simpul yang dikandung pada jalan tersebut. Akar mempunyai tingkat sama jalan tersebut. Akar mempunyai tingkat sama dengan 1. dengan 1.

Dua buah simpul disebut sebagai Sepupu jika Dua buah simpul disebut sebagai Sepupu jika mempunyai tingkat yang sama dalam sebuah mempunyai tingkat yang sama dalam sebuah pohon.pohon.

Page 6: 4. Pohon (Tree)

6

11.11. Kedalaman (Tinggi)Kedalaman (Tinggi)Kedalaman (Tinggi) dari pohon adalah nilai Kedalaman (Tinggi) dari pohon adalah nilai maksimum dari tingkat simpul yang ada pada maksimum dari tingkat simpul yang ada pada pohon tersebut. Kedalaman adalah panjang pohon tersebut. Kedalaman adalah panjang maksimum jalan dari Akar menuju ke sebuah maksimum jalan dari Akar menuju ke sebuah daundaun

12.12. LebarLebarLebar sebuah Pohon adalah maksimum Lebar sebuah Pohon adalah maksimum banyaknya simpul yang ada pada suatu banyaknya simpul yang ada pada suatu Tingkat (Level)Tingkat (Level)

Page 7: 4. Pohon (Tree)

7

4.2. Struktur Pohon Biner4.2. Struktur Pohon BinerDefinisiDefinisiSebuah pohon biner (Sebuah pohon biner (Binary TreeBinary Tree) adalah ) adalah

himpunan terbatas yang :himpunan terbatas yang : Mungkin kosong atauMungkin kosong atau Terdiri dari sebuah simpul yang disebut Terdiri dari sebuah simpul yang disebut

sebagai Akar dan dua buah himpunan lain sebagai Akar dan dua buah himpunan lain yang disjoint yang merupakan pohon biner yang disjoint yang merupakan pohon biner yang disebut sebagai Sub Pohon Kiri (yang disebut sebagai Sub Pohon Kiri (LeftLeft) ) dan Sub Pohon Kanan (dan Sub Pohon Kanan (RightRight) dari pohon biner ) dari pohon biner tersebut.tersebut.

Page 8: 4. Pohon (Tree)

8

Pohon biner merupakan tipe yang sangat penting Pohon biner merupakan tipe yang sangat penting dari struktur data dan banyak dijumpai dari struktur data dan banyak dijumpai dalam berbagai terapan. Karakteristik dalam berbagai terapan. Karakteristik

yang yang dimiliki oleh pohon biner adalah bahwa dimiliki oleh pohon biner adalah bahwa setiap simpul paling banyak hanya setiap simpul paling banyak hanya

memiliki dua buah anak, dan mungkin memiliki dua buah anak, dan mungkin tidak punya anak.tidak punya anak.

Istilah-istilah yang digunakan sama dengan Istilah-istilah yang digunakan sama dengan istilah pada pohon secara umum.istilah pada pohon secara umum.

Page 9: 4. Pohon (Tree)

9

Notasi Prefiks, Infiks dan PostfiksNotasi Prefiks, Infiks dan Postfiks

1.1. Notasi PrefiksNotasi Prefiks

Notasi Prefiks ditulis dengan cara Notasi Prefiks ditulis dengan cara mengikuti alur sebagai berikut :mengikuti alur sebagai berikut :

Page 10: 4. Pohon (Tree)

10

2.2. Notasi InfiksNotasi Infiks

Notasi ini ditulis dengan cara mengikuti alur Notasi ini ditulis dengan cara mengikuti alur sebagai berikut :sebagai berikut :

Page 11: 4. Pohon (Tree)

11

3.3. Notasi PosfiksNotasi Posfiks

Notasi ini ditulis dengan cara mengikuti alur Notasi ini ditulis dengan cara mengikuti alur sebagai berikutsebagai berikut : :

Page 12: 4. Pohon (Tree)

12

Rekonstruksi AlgoritmaRekonstruksi Algoritma

{Deklarasi Type}{Deklarasi Type}

TypeType Infotype = … Infotype = … {terdefinisi}{terdefinisi}

TypeType node = node = recordrecord <Info : infotype, <Info : infotype,

Left : address,Left : address,

Right: address >Right: address >

TypeType BinTree : address BinTree : address

{Primitif}{Primitif}

Page 13: 4. Pohon (Tree)

13

functionfunction Akar (P : BinTree) Akar (P : BinTree) infotype infotype

{Mengirimkan nilai Akar pohon biner P}{Mengirimkan nilai Akar pohon biner P}

functionfunction Left (P : BinTree) Left (P : BinTree) infotype infotype

{Mengirimkan anak kiri pohon biner P}{Mengirimkan anak kiri pohon biner P}

functionfunction Right (P : BinTree) Right (P : BinTree) infotype infotype

{Mengirimkan anak kanan pohon biner P}{Mengirimkan anak kanan pohon biner P}

Page 14: 4. Pohon (Tree)

14

functionfunction IsEmpty(P : BinTree) IsEmpty(P : BinTree)booleanboolean{ Test apakah sebuah pohon kosong, { Test apakah sebuah pohon kosong,

mengirimkan True jika kosong dan False jika mengirimkan True jika kosong dan False jika tidak}tidak}

procedureprocedure MakeTree( MakeTree(inputinput Akar : infotype, L : Akar : infotype, L : BinTree, R : BinTree, BinTree, R : BinTree, outputoutput P : P :

BinTree)BinTree){ K. Awal{ K. Awal : sembarang: sembarang

K. AkhirK. Akhir : Terbentuk sebuah pohon biner: Terbentuk sebuah pohon binerProsesProses : Menghasilkan sebuah pohon biner : Menghasilkan sebuah pohon biner

dari Akar, L dan R} dari Akar, L dan R}

Page 15: 4. Pohon (Tree)

15

{Traversal}{Traversal}

ProcedurProcedur PreOrder( PreOrder(inputinput P : BinTree) P : BinTree)

{K. AWAL {K. AWAL : P terdefinisi: P terdefinisi

K. AKHIR K. AKHIR : Semua simpul P sudah : Semua simpul P sudah diproses secara preorder} diproses secara preorder}

ProcedureProcedure InOrder( InOrder(inputinput P : BinTree) P : BinTree)

{K. AWAL {K. AWAL : P terdefinisi: P terdefinisi

K. AKHIR K. AKHIR : Semua simpul P sudah : Semua simpul P sudah diproses secara inorder} diproses secara inorder}

Page 16: 4. Pohon (Tree)

16

ProcedureProcedure PostOrder( PostOrder(inputinput P : BinTree) P : BinTree)

{K. AWAL {K. AWAL : P terdefinisi: P terdefinisi

K. AKHIR K. AKHIR : Semua simpul P sudah : Semua simpul P sudah diproses secara postorder} diproses secara postorder}

ProcedureProcedure PrintTree( PrintTree(inputinput P : BinTree, h : P : BinTree, h : integerinteger))

{K. AWAL : P terdefinisi, h adalah jarak indentasi{K. AWAL : P terdefinisi, h adalah jarak indentasi

K. AKHIR : Semua simpul P sudah ditulis dengan K. AKHIR : Semua simpul P sudah ditulis dengan indentasi} indentasi}

Page 17: 4. Pohon (Tree)

17

{Search}{Search}

functionfunction Search(P : BinTree, X : infotype) Search(P : BinTree, X : infotype)booleanboolean

{Mengirimkan True jika ada node P bernilai X, false {Mengirimkan True jika ada node P bernilai X, false jika tidak}jika tidak}

{fungsi lain}{fungsi lain}

functionfunction NbElmt(P : BinTree) NbElmt(P : BinTree)integerinteger

{Mengirimkan banyaknya elemen (node) pohon {Mengirimkan banyaknya elemen (node) pohon biner P}biner P}

Page 18: 4. Pohon (Tree)

18

functionfunction NbDaun(P : BinTree) NbDaun(P : BinTree) integerinteger

{ Mengirimkan banyaknya daun pohon biner P}{ Mengirimkan banyaknya daun pohon biner P}

functionfunction IsUnerLeft(P : BinTree) IsUnerLeft(P : BinTree) booleanboolean

{ Mengirimkan True jika pohon biner tidak { Mengirimkan True jika pohon biner tidak kosong P adalah pohon unerleft yaitu hanya kosong P adalah pohon unerleft yaitu hanya mempunyai sub pohon kiri}mempunyai sub pohon kiri}

functionfunction IsUnerRight(P : BinTree) IsUnerRight(P : BinTree) booleanboolean

{ Mengirimkan True jika pohon biner tidak { Mengirimkan True jika pohon biner tidak kosong P adalah pohon unerright yaitu hanya kosong P adalah pohon unerright yaitu hanya mempunyai sub pohon kanan}mempunyai sub pohon kanan}

Page 19: 4. Pohon (Tree)

19

functionfunction IsBin(P : BinTree) IsBin(P : BinTree)booleanboolean{ Mengirimkan True jika pohon biner tidak { Mengirimkan True jika pohon biner tidak

kosong P adalah pohon biner yaitu mempunyai kosong P adalah pohon biner yaitu mempunyai sub pohon kanan dan sub pohon kiri}sub pohon kanan dan sub pohon kiri}

functionfunction IsSkewLeft(P : BinTree) IsSkewLeft(P : BinTree)booleanboolean{ Mengirimkan True jika pohon biner P adalah { Mengirimkan True jika pohon biner P adalah

pohon condong kiri}pohon condong kiri}

functionfunction IsSkewRight(P : BinTree) IsSkewRight(P : BinTree)booleanboolean{ Mengirimkan True jika pohon biner P adalah { Mengirimkan True jika pohon biner P adalah

pohon condong kanan}pohon condong kanan}

Page 20: 4. Pohon (Tree)

20

functionfunction Tinggi(P : BinTree) Tinggi(P : BinTree)integerinteger

{ Mengirimkan tinggi dari pohon biner P}{ Mengirimkan tinggi dari pohon biner P}

functionfunction Level(P : BinTree, X : infotype) Level(P : BinTree, X : infotype)integerinteger

{ Mengirimkan level dari node X yang merupakan { Mengirimkan level dari node X yang merupakan salah satu simpul dari pohon biner P}salah satu simpul dari pohon biner P}

{Operasi Lain}{Operasi Lain}

Page 21: 4. Pohon (Tree)

21

ProcedureProcedure AddDaunTerkiri( AddDaunTerkiri(input/outputinput/output P:BinTree, P:BinTree, inputinput X: infotype) X: infotype)

{K. AWAL : P boleh kosong{K. AWAL : P boleh kosong K. AKHIR : P bertambah simpulnya, dengan X K. AKHIR : P bertambah simpulnya, dengan X

adalah simpul daun terkiri} adalah simpul daun terkiri}ProcedureProcedure AddDaun( AddDaun(input/outputinput/output P:BinTree, P:BinTree, inputinput

X, Y : infotype, X, Y : infotype, inputinput Kiri : Kiri : booleanboolean)){K. AWAL : P tidak boleh kosong, X adalah salah {K. AWAL : P tidak boleh kosong, X adalah salah

satu daun pohon Biner P satu daun pohon Biner P K. AKHIR : P bertambah simpulnya, dengan Y K. AKHIR : P bertambah simpulnya, dengan Y

adalah anak kiri X (jika kiri) atau adalah anak kiri X (jika kiri) atau sebagai anak kanan X (jika not kiri)} sebagai anak kanan X (jika not kiri)}

Page 22: 4. Pohon (Tree)

22

ProcedureProcedure DelDaunTerkiri( DelDaunTerkiri(input/outputinput/output P:BinTree, P:BinTree, outputoutput X: infotype) X: infotype)

{K. AWAL : P tidak kosong{K. AWAL : P tidak kosong K. AKHIR: P dihapus daun terkirinya dan K. AKHIR: P dihapus daun terkirinya dan

didealokasi, dengan X adalah info didealokasi, dengan X adalah info yang semula disimpan pada daun yang semula disimpan pada daun terkiri yang dihapus} terkiri yang dihapus}

ProcedureProcedure DelDaun( DelDaun(input/outputinput/output P:BinTree, P:BinTree, outputoutput X: infotype) X: infotype)

{K. AWAL : P tidak kosong, X adalah salah satu {K. AWAL : P tidak kosong, X adalah salah satu daun daun

K. AKHIR : X dihapus dari P}K. AKHIR : X dihapus dari P}