Pohon Biner. Tim Pengajar IF2030 Semester I/ /8/2009 FNA/IF2030/Sem

dokumen-dokumen yang mirip
Pohon Biner (Bagian 1)

Tipe Rekursif: POHON (TREE)

STRUKTUR POHON. HUTAN Definisi : hutan adalah sequence (list) dari pohon)

Pohon Biner Bagian 2 (Pohon Seimbang, Pohon Biner Terurut, Pembangunan Pohon Biner dari Pita Karakter/String)

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Tree (Pohon)

6. TREE / BINARY TREE

LIST LINIER 1. DEFINISI

List Linier. IF2030/Algoritma dan Struktur Data. 11/6/2009 FNA+WDS/IF2030/Sem

Penerapan Pohon Untuk Memanipulasi dan Meritrieve Data

GANJIL 2009/2010 NIM: Algoritma dan Struktur Data / CS2014 Nama :

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

Optimalisasi Algoritma Pencarian Data Memanfaatkan Pohon Biner Terurut

Pohon dan Pohon Biner

Pemrograman Algoritma Dan Struktur Data

Struktur Data. Queue (Antrian)

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Stack (Tumpukan)

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

List Linier (Bag. I) IF2121/Algoritma dan Struktur Data Sem. I 2016/ /25/2017 IF2121/Sem I 2017/2018 1

BAB IV POHON. Diktat Algoritma dan Struktur Data 2

B C D E F G H I J K L M N O P Q R S T. Tinaliah, S.Kom POHON BINER

BAB XI Manipulasi Binary Tree

Tree (Struktur Data) Nisa ul Hafidhoh, MT

IKG2A3/ Pemrograman Terstruktur 2

Binary Tree kosong Gambar 1. Binary Tree dalam kondisi kosong

Variasi List Linier (Bagian 2)

Algoritma dan Struktur Data. Binary Tree & Binary Search Tree (BST)

TREE STRUCTURE (Struktur Pohon)

STRUKTUR POHON (TREE) Pohon atau Tree adalah salah satu bentuk Graph terhubung yang tidak mengandung sirkuit.

Pertemuan 9 STRUKTUR POHON & KUNJUNGAN POHON BINER

TREE ALGORITMA & STRUKTUR DATA. Materi ASD Fakultas Teknik Elektro & Komputer UKSW ( Download Dari :

Bagian I. Studi Kasus [82] Tanda tangan:

ALGORITMA DAN STRUKTUR DATA

Pohon. Bahan Kuliah IF2120 Matematika Diskrit. Program Studi Teknik Informatika ITB. Rinaldi M/IF2120 Matdis 1

Pohon (Tree) Universitas Gunadarma Sistem Informasi 2012/2013

STRUKTUR POHON (TREE) Pohon atau Tree adalah salah satu bentuk Graph terhubung yang tidak mengandung sirkuit.

Definisi. Pohon adalah graf tak-berarah, terhubung, dan tidak mengandung sirkuit. pohon pohon bukan pohon bukan pohon (ada sikuit) (tdk terhubung)

DEFINISI. Pohon adalah graf tak-berarah terhubung yang tidak mengandung sirkuit. pohon pohon bukan pohon bukan pohon 2

Representasi Logic List Linier

Pohon (TREE) Matematika Deskrit. Hasanuddin Sirait, MT 1

MODUL PRAKTIKUM STRUKTUR DATA Modul ke-1, Pertemuan ke-1 Nama file : P01-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: Senarai, Traversal

Matematika Diskret (Pohon) Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.

BAB VII POHON BINAR POHON

Implementasi Skema Pohon Biner yang Persistent dalam Pemrograman Fungsional

BAB VII Tujuan 7.1 Deskripsi dari Binary Tree

Buku Ajar Struktur Data

Tenia Wahyuningrum, S.Kom. MT Sisilia Thya Safitri, S.T.,M.T.

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Queue (Antrian)

IT234 Algoritma dan Struktur Data. Tree

STRUKTUR POHON & KUNJUNGAN POHON BINER

POHON CARI BINER (Binary Search Tree)

Penerapan DFS dan BFS dalam Pencarian Solusi Game Japanese River IQ Test

TREE. Definisi. Istilah-istilah Umum dalam Tree

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 10 & 11

Tree. Perhatikan pula contoh tree di bawah ini : Level. Level 2. Level 3. Level 4. Level 5

{ Kamus Umum } constant IdxMax : integer = 100 constant IdxMin : integer = 1 constant IdxUndef : integer = -999 { indeks tak terdefinisi}

STRUKTUR DATA. Pengajar Jaidan Jauhari,, MT. Alamat Halaman 1

STRUKTUR DATA. Pengajar Jaidan Jauhari,, MT. Alamat Halaman 1

BAB II STACK Atau TUMPUKAN

Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP

Termilogi Pada Pohon Berakar 10 Pohon Berakar Terurut

UJIAN AKHIR SEMESTER GANJIL 2005/2006 ALGORITMA & STRUKTUR DATA / CS2014

Algoritma dan Struktur Data. Linear & Binary Search Tree

IKG2A3/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Variasi List Linier

KUM 6 IMPLEMENTASI BINARY TREE

LATIHAN UTS Tim Pengajar KU1071 Sem

Struktur dan Organisasi Data 2 POHON BINAR

Definisi. Pohon adalah graf tak-berarah terhubung yang tidak mengandung sirkuit. pohon pohon bukan pohon bukan pohon

ALGORITMA & PEMROGRAMAN

Ringkasan mengenai Tree (Dari beberapa referensi lain) Nina Valentika

ALGORITMA PENCARIAN SIMPUL SOLUSI DALAM GRAF

Aplikasi Graf Breadth-First Search Pada Solver Rubik s Cube

TUGAS MAKALAH INDIVIDUAL. Mata Kuliah : Matematika Diskrit / IF2153 Nama : Dwitiyo Abhirama NIM :

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

A. Bagian I. Studi Kasus

Silsilah keluarga Hasil pertandingan yang berbentuk turnamen Struktur organisasi dari sebuah perusahaan. B.1 Pohon Biner (Binary Tree)

Penerapan Pohon Untuk Menyelesaikan Masalah Labirin

METODE AVL TREE UNTUK PENYEIMBANGAN TINGGI BINARY TREE

D I K T A T L I S P Oleh : Sri Purwanti

BAB 7 POHON BINAR R S U

QUEUE Antrian 1. DEFINISI

Struktur Data Tree/Pohon dalam Bahasa Java

: Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Linked List. Single Linked List

PENCARIAN BERUNTUN (SEQUENTIAL SEARCHING)

BAB IX TREE (POHON) ISTILAH DASAR

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

MODUL PRAKTIKUM STRUKTUR DATA

Kode MK/ Pemrograman Terstruktur 2

CCH1A4 / Dasar Algoritma & Pemrogramanan

MODUL PRAKTIKUM PERCABANGAN DAN PENGULANGAN

Mata Kuliah : Struktur Data Semester : Genap Kode Mata Kuliah : 307 Waktu : 180 Menit Bobot : 4 sks. Jurusan : MI

A B C E F G K Contoh Tree

Pendahuluan Struktur Data. Nisa ul Hafidhoh

Pohon Biner Sebagai Struktur Data Heap dan Aplikasinya

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer

Linked List. Bandung 2013

Pohon Biner dan Aplikasinya

Politeknik Elektronika Negeri Surabaya

ANALISIS ALGORITMA PEMBANGUN POHON EKSPRESI DARI NOTASI PREFIKS DAN POSTFIKS

IKG2A3/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Mesin Abstrak

Transkripsi:

Pohon Biner Tim Pengajar IF2030 Semester I/2009-2010 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 1

Contoh Persoalan - 1 Menu dalam Aplikasi Komputer Contoh (Ms Word): File Open Close Save Table Draw Insert Table Column Row Delete File Menu Ms Word Table Open Close Save Draw Insert Delete Table Column Row 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 2

Contoh Persoalan - 2 Susunan bab dalam buku Contoh: Diktat Struktur Data Bagian I. Struktur Data Abstract Data Type ADT JAM dalam Bahasa Algoritmik ADT POINT dalam Bahasa Algoritmik ADT GARIS dalam Bahasa Algoritmik Latihan Soal Koleksi Objek Bagian II Studi Kasus 1 : Polinom Deskripsi Persoalan Studi Kasus 2 : Kemunculan Huruf dan Posisi Pada Pita Karakter Deskripsi Persoalan 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 3

Pohon keluarga Contoh Persoalan - 3 Contoh: Pohon keluarga bangsawan Inggris Elizabeth II Charles Anne Andrew Edward William Harry Peter Zara Beatrice Eugenie Louise James 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 4

Akar Akar Pohon SubPohon Pohon SubPohon Definisi Rekursif Pohon: - Akar basis - Sub Pohon (sub himpunan yang berupa pohon), suatu rekurens 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 5

Definisi Rekursif Pohon Pohon (tree) adalah himpunan terbatas, tidak kosong, dengan elemen dibedakan sebagai berikut: Sebuah elemen yang dibedakan dari yang lain AKAR Elemen yang lain (jika ada) dibagi-bagi menjadi beberapa sub himpunan yang disjoin dan masingmasing sub himpunan itu adalah pohon SUBPOHON Suffiks -aire pada pohon menunjukkan berapa maksimum subpohon yang dapat dimiliki oleh suatu pohon Binaire (binary) : maksimum subpohon 2 N-aire : maksimum subpohon N 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 6

Akar a adalah ayah, sub pohon (b (d e)) dan sub pohon (c (g h(i))) adalah anak. Sub pohon (b (d e)) adalah saudara dari sub pohon (c (g h(i))) b Istilah a c Ayah (father) Anak (child) Saudara (sibling) d e g h Akar b adalah ayah, sub pohon (d) dan sub pohon (e) adalah anak. Sub pohon (d) adalah saudara dari sub pohon (e) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 7 i

Tingkat (level) : panjang jalan dari akar sampai simpul tertentu. Cth: tingkat (e) = 3, tingkat (i) = 4, Kedalaman (depth) : tingkat terpanjang. Cth: kedalaman pohon=4 b Istilah a c Jalan (path) : urutan tertentu dari cabang, cth: a-c-h-i Lebar (breadth) : maksimum jml simpul pd suatu tingkat. d e g h Daun (leaf) : simpul terminal 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 8 i Derajat : banyaknya anak sebuah simpul. Cth, derajat(c)=2, derajat(h)=1, derajat(g)=0

Beberapa Ilustrasi Representasi a b c d e f g h d e b f a g c h i Graph i Himpunan Indentasi a b d e f c gh Bentuk Linier Prefix: (a (b (d (), e (), f ()), c ( g (), h ( i ())))) (a (b (d) (e) (f)) (c (g) (h (i)))) Postfix: (((d,e,f) b, (g, (i) h) c) a) i 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 9

Pohon Biner Pohon biner adalah himpunan terbatas yang mungkin kosong, atau terdiri atas sebuah simpul yang disebut akar dan dua buah himpunan lain yang disjoint yang merupakan pohon biner, yang disebut sebagai sub pohon kiri dan sub pohon kanan dari pohon biner tersebut Perhatikanlah perbedaan pohon biner dengan pohon N-aire: pohon biner mungkin kosong, pohon N-aire tidak mungkin kosong 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 10

Contoh Pohon Biner + 3 * a 3+(4*5) 4 5 c b Pohon biner condong kiri a a c b d Pohon biner condong kanan b c e Pohon condong/skewed tree 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 11

ADT Pohon Biner dengan Representasi Berkait KAMUS { Deklarasi TYPE POHON BINER } constant Nil :... { konstanta pohon kosong, terdefinisi } type infotype :... { terdefinisi } type address : pointer to node { Type Pohon Biner } type BinTree : address type node : < Info : infotype, { simpul/akar } Left : BinTree, { subpohon kiri } Right : BinTree { subpohon kanan } > { Tambahan struktur data list untuk pengelolaan elemen pohon } type ElmtNode : < Info : infotype, Next : addresslist > type ListOfNode : addresslist { list linier yang elemennya adalah ElmtNode } 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 12

Konstruktor function Tree (Akar : infotype, L : BinTree, R : BinTree) BinTree { Menghasilkan sebuah pohon biner dari A, L, dan R, jika alokasi berhasil } { Menghasilkan pohon kosong (Nil) jika alokasi gagal } procedure MakeTree (input Akar : infotype, input L : BinTree, input R : BinTree, output P : BinTree) { I.S. Sembarang } { F.S. Menghasilkan sebuah pohon P } { Menghasilkan sebuah pohon biner P dari A, L, dan R, jika alokasi berhasil } { Menghasilkan pohon P yang kosong (Nil) jika alokasi gagal } 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 13

Selektor function Akar (P : BinTree) infotype { Mengirimkan nilai Akar pohon biner P } function Left (P : BinTree) BinTree { Mengirimkan subpohon kiri pohon biner P } function Right (P : BinTree) BinTree { Mengirimkan subpohon kanan pohon biner P } 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 14

Memory Management function Alokasi (X : infotype) address { Mengirimkan address hasil alokasi sebuah elemen X } { Jika alokasi berhasil, maka address tidak nil, dan misalnya menghasilkan P, maka Info(P)=X, Left(P)=Nil, Right(P)=Nil */ { Jika alokasi gagal, mengirimkan Nil } procedure Dealokasi (P : address) { I.S. P terdefinisi } { F.S. P dikembalikan ke sistem } { Melakukan dealokasi/pengembalian address P } Catatan: untuk ListOfNode harus dibuat primitif memory management sendiri 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 15

Predikat Penting - 1 function IsTreeEmpty (P : BinTree) boolean { Mengirimkan true jika P adalah pohon biner yang kosong } KAMUS LOKAL ALGORITMA (P = Nil) function IsOneElmt (P : BinTree) boolean { Mengirimkan true jika P tidak kosong dan hanya terdiri atas 1 elemen } KAMUS LOKAL ALGORITMA not(istreeempty(l)) and (Left(P) = Nil) and (Right(P) = Nil) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 16

Predikat Penting - 2 function IsUnerLeft (P : BinTree) boolean { Mengirimkan true jika pohon biner tidak kosong P adalah pohon unerleft: hanya mempunyai subpohon kiri } function IsUnerRight (P : BinTree) boolean { Mengirimkan true jika pohon biner tidak kosong P adalah pohon unerright: hanya mempunyai subpohon kanan } function IsBiner (P : BinTree) boolean { Mengirimkan true jika pohon biner tidak kosong P adalah pohon biner: mempunyai subpohon kiri dan subpohon kanan } 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 17

Traversal - Preorder procedure PreOrder (input P : BinTree) { I.S. Pohon P terdefinisi } { F.S. Semua node pohon P sudah diproses secara PreOrder: akar, kiri, kanan } { Basis : Pohon kosong : tidak ada yang diproses } { Rekurens : Proses Akar(P); Proses secara Preorder (Left(P)); Proses secara Preorder (Right(P)) } KAMUS LOKAL ALGORITMA if (P = Nil) then { Basis-0 } { do nothing } else { Rekurens, tidak kosong } Proses(P) PreOrder(Left(P)) PreOrder(Right(P)) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 18

Contoh - PrintPreOrder procedure PrintPreOrder (input P : BinTree) { I.S. Pohon P terdefinisi } { F.S. Semua node pohon P sudah dicetak secara PreOrder: akar, kiri, kanan } { Basis : Pohon kosong : tidak ada yang diproses } { Rekurens : Cetak Akar(P); cetak secara Preorder (Left(P)); cetak secara Preorder (Right(P)) } KAMUS LOKAL ALGORITMA if (P = Nil) then { Basis-0 } { do nothing } else { Rekurens, tidak kosong } output(akar(p)) PrintPreOrder(Left(P)) PrintPreOrder(Right(P)) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 19

Traversal - Inorder procedure InOrder (input P : BinTree) { I.S. Pohon P terdefinisi } { F.S. Semua node pohon P sudah diproses secara InOrder: kiri, akar, kanan } { Basis : Pohon kosong : tidak ada yang diproses } { Rekurens : Proses secara inorder (Left(P)); Proses Akar(P); Proses secara inorder (Right(P)) } KAMUS LOKAL ALGORITMA if (P = Nil) then { Basis-0 } { do nothing } else { Rekurens, tidak kosong } InOrder(Left(P)) Proses(P) InOrder(Right(P)) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 20

Traversal Post-order procedure PostOrder (input P : BinTree) { I.S. Pohon P terdefinisi } { F.S. Semua node pohon P sudah diproses secara PostOrder: kiri, kanan, akar } { Basis : Pohon kosong : tidak ada yang diproses } { Rekurens : Proses secara PostOrder (Left(P)); Proses secara PostOrder (Right(P)); Proses Akar(P); } KAMUS LOKAL ALGORITMA if (P = Nil) then { Basis-0 } { do nothing } else { Rekurens, tidak kosong } PostOrder(Left(P)) PostOrder(Right(P)) Proses(P) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 21

Tinggi/Kedalaman Pohon function Tinggi (R : BinTree) integer { Pohon Biner mungkin kosong. Mengirim depth yaitu tinggi dari pohon } { Basis: Pohon kosong: tingginya nol } { Rekurens: 1 + maksimum (Tinggi(Anak kiri), Tinggi(AnakKanan)) } KAMUS LOKAL ALGORITMA if (R = Nil) then { Basis 0 } 0 else { Rekurens } 1 + max (Tinggi(Left(R)), Tinggi(Right(R))) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 22

NBDaun (Basis-1) function NBDaun (P : BinTree) integer { Prekondisi: Pohon Biner tidak mungkin kosong. Mengirimkan banyaknya daun pohon } { Basis: Pohon yang hanya mempunyai akar: 1 } { Rekurens: Punya anak kiri dan tidak punya anak kanan: NBDaun(Left(P)) Tidak Punya anak kiri dan punya anak kanan : NBDaun(Right(P)) Punya anak kiri dan punya anak kanan : NBDaun(Left(P)) + NBDaun(Right(P)) } KAMUS LOKAL ALGORITMA if (IsOneElmt(P)) then { Basis 1 : akar } 1 else { Rekurens } depend on (P) IsUnerLeft(P) : NBDaun(Left(P)) IsUnerRight(P) : NBDaun(Right(P)) IsBiner(P) : NBDaun(Left(P))+NBDaun(Right(P)) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 23

Latihan-Latihan function Search (P : BinTree, X : infotype) boolean { Mengirimkan true jika ada node dari P yang bernilai X } function NbElmt (P : BinTree) integer { Mengirimkan banyaknya elemen (node) pohon biner P } function IsSkewLeft (P : BinTree) boolean { Mengirimkan true jika P adalah pohon condong kiri } function IsSkewRight (P : BinTree) boolean { Mengirimkan true jika P adalah pohon condong kanan } function Level (P : BinTree, X : infotype) integer { Mengirimkan level dari node X yang merupakan salah satu daun dari pohon biner P. Akar(P) level-nya adalah 1. Pohon P tidak kosong. } 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 24

Latihan-Latihan procedure AddDaunTerkiri (input/output P : BinTree, input X : infotype) { I.S. P boleh kosong } { F.S. P bertambah simpulnya, dengan X sebagai simpul daun terkiri } procedure AddDaun (input/output P : BinTree, input X, Y : infotype, input Kiri : boolean) { I.S. P tidak kosong, X adalah salah satu daun Pohon Biner P } { F.S. P bertambah simpulnya, dengan Y sebagai anak kiri X (jika Kiri), atau sebagai anak Kanan X (jika not Kiri) } procedure DelDaunTerkiri (input/output P : BinTree, output X : infotype) { I.S. P tidak kosong } { F.S. P dihapus daun terkirinya, dan didealokasi, dengan X adalah info yang semula disimpan pada daun terkiri yang dihapus } procedure DelDaun (input/output P : BinTree, input X : infotype) { I.S. P tidak kosong, X adalah salah satu daun } { F.S. X dihapus dari P } 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 25

Latihan-Latihan function MakeListDaun (P : BinTree) ListOfNode { Jika P adalah pohon kosong, maka menghasilkan list kosong. } { Jika P bukan pohon kosong: menghasilkan list yang elemennya adalah semua daun pohon P, jika semua alokasi berhasil. Menghasilkan list kosong jika ada alokasi yang gagal } function MakeListPreorder (P : BinTree) ListOfNode { Jika P adalah pohon kosong, maka menghasilkan list kosong. } { Jika P bukan pohon kosong: menghasilkan list yang elemennya adalah semua elemen pohon P dengan urutan Preorder, jika semua alokasi berhasil. Menghasilkan list kosong jika ada alokasi yang gagal } function MakeListLevel (P : BinTree, N : integer) ListOfNode { Jika P adalah pohon kosong, maka menghasilkan list kosong. } { Jika P bukan pohon kosong: menghasilkan list yang elemennya adalah semua elemen pohon P yang levelnya=n, jika semua alokasi berhasil. Menghasilkan list kosong jika ada alokasi yang gagal. } 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 26

Search function Search (P : BinTree, X : infotype) boolean { Mengirimkan true jika ada node dari P yang bernilai X } KAMUS LOKAL ALGORITMA if (IsTreeEmpty(P)) then { Basis-0 } false else { Rekurens } if (Akar(P) = X) then true else Search(Left(P),X) or Search(Right(P),X) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 27

NbElmt function NbELmt (P : BinTree) integer { Mengirimkan banyaknya elemen (node) pohon biner P } KAMUS LOKAL ALGORITMA if (IsTreeEmpty(P)) then { Basis-0 } 0 else { Rekurens } 1 + NbElmt(Left(P)) + NbElmt(Right(P)) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 28

IsSkewLeft - 1 function IsSkewLeft (P : BinTree) boolean { Mengirimkan true jika P adalah pohon condong kiri } { Asumsi : Pohon kosong adalah pohon condong kiri } KAMUS LOKAL ALGORITMA if (IsTreeEmpty(P)) then { Basis-0 } true else { Rekurens } if (not(istreeempty(right(p)))) then false else IsSkewLeft(Left(P)) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 29

IsSkewLeft - 2 function IsSkewLeft (P : BinTree) boolean { Mengirimkan true jika P adalah pohon condong kiri } { Asumsi : Pohon kosong bukan pohon condong kiri, pohon 1 elemen adalah pohon condong kiri } KAMUS LOKAL ALGORITMA if (IsTreeEmpty(P)) then { Kasus khusus } false else if (IsOneElmt(P)) then { Basis-1 } true else { Rekurens } if (IsUnerLeft(P)) then IsSkewLeft(Left(P)) else { P punya pohon kanan } false 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 30

Level function Level (P : BinTree, X : infotype) integer { Mengirimkan level dari node X yang merupakan salah satu daun dari pohon biner P. Akar(P) level-nya adalah 1. Pohon P tidak kosong. } KAMUS LOKAL ALGORITMA if (IsOneElmt(P)) then { Basis-1 } 1 { Akar(P) dijamin pasti X } else { Rekurens } depend on (P) IsUnerLeft(P) : 1 + Level(Left(P),X) IsUnerRight(P) : 1 + Level(Right(P),X) IsBiner(P) : if (Search(Left(P),X)) then 1 + Level(Left(P),X) else { pasti ada di pohon kanan } 1 + Level(Right(P),X) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 31

AddDaunTerkiri procedure AddDaunTerkiri (input/output P : BinTree, input X : infotype) { I.S. P boleh kosong } { F.S. P bertambah simpulnya, dengan X sebagai simpul daun terkiri } KAMUS LOKAL N : address ALGORITMA if (IsTreeEmpty(P)) then { Basis-0 } N Alokasi(X) if (N Nil) then {jika alokasi sukses} P N { else: P tetap } else { Rekurens } AddDaunTerkiri(Left(P), X) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 32

AddDaun procedure AddDaun (input/output P : BinTree, input X, Y : infotype, input Kiri : boolean) { I.S. P tidak kosong, X adalah salah satu daun Pohon Biner P. Tambahan asumsi : X bisa lebih dari satu daun } { F.S. P bertambah simpulnya, dengan Y sebagai anak kiri X (jika Kiri), atau sebagai anak Kanan X (jika not Kiri) } KAMUS LOKAL N : address ALGORITMA if (IsOneElmt(P)) then { Basis-1 } if (Akar(P) = X) then N Alokasi(Y) if N Nil then if Kiri then Left(P) N else { not Kiri } Right(P) N else { Rekurens } depend on (P) IsUnerLeft(P) : AddDaun(Left(P),X,Y,Kiri) IsUnerRight(P) : AddDaun(Right(P),X,Y,Kiri) IsBiner(P) : AddDaun(Left(P),X,Y,Kiri) AddDaun(Right(P),X,Y,Kiri) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 33

MakeListPreorder function MakeListPreorder (P : BinTree) ListOfNode { Jika P adalah pohon kosong, maka menghasilkan list kosong. } { Jika P bukan pohon kosong: menghasilkan list yang elemennya adalah semua elemen pohon P dengan urutan Preorder, jika semua alokasi berhasil. Menghasilkan list kosong jika ada alokasi yang gagal } KAMUS LOKAL E : addresslist L : ListOfNode ALGORITMA if (IsTreeEmpty(P)) then { Basis-0 } Nil else { Rekurens } E AlokList(Akar(P)) if (E Nil) then Next(E) MakeListPreOrder(Left(P)) L MakeListPreOrder(Right(P)) Concat1 (E,L) else { E gagal dialokasi } Nil

MakeListDaun function MakeListDaun (P : BinTree) ListOfNode { Jika P adalah pohon kosong, maka menghasilkan list kosong. } { Jika P bukan pohon kosong: menghasilkan list yang elemennya adalah semua daun pohon P, jika semua alokasi berhasil. Menghasilkan list kosong jika ada alokasi yang gagal } KAMUS LOKAL E : addresslist L : ListOfNode ALGORITMA if (IsOneEmpty(P)) then { kasus khusus } Nil else { Rekurens } if IsOneElmt(P) then { basis-1 } E AlokList(Akar(P)) if (E Nil) then E else { E gagal dialokasi } Nil else { Rekurens } depend on (P) IsUnerLeft(P) : MakeListDaun(Left(P)) IsUnerRight(P) : MakeListDaun(Right(P)) IsBiner(P) : Concat1(MakeListDaun(Left(P)), MakeListDaun(Right(P))) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 35

Concat1 function Concat1 (L1, L2 : ListOfNode) ListOfNode { Menghasilkan gabungan L1 dan L2, tanpa alokasi elemen baru } KAMUS LOKAL Last : addresslist ALGORITMA if (not(listempty(l1))) then Last L1 while (Next(Last) Nil) then { Basis-0 } Last Next(Last) { Next(Last) = Nil } Next(Last) L2 L1 else L2 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 36

PR Modul P-15. ADT Pohon Biner (untuk bagian Pohon Seimbang dan Binary Search Tree dikerjakan setelah materi tersebut diberikan) 12/8/2009 FNA/IF2030/Sem. 1 2008-2009 37