BAB II-B Tree

110
BAB II LANDASAN TEORI Struktur Data Tree (pohon) Tree (pohon) sebagai struktur data non linear yang banyak digunakan dalam aplikasi sehari-hari. Contoh aplikasi pohon yang dapat kita lihat sehari-hari adalah pengelolaan file dalam direktori penyimpanan. Tree sebagai struktur data non linear mempunyai dua sifat penting, yaitu terhubung dan tidak mengandung sirkuit. Pada Gambar 2.1, hanya G1 dan G2 yang tree, sedangkan G3 dan G4 bukan tree. G3 bukan tree karena ia mengandung sirkuit a, d, f, a, sedangkan G4 bukan tree karena ia tidak terhubung (dalam hal ini sisi (a, f) dan sisi (b, e)– karena titik silangnya bukan menyatakan simpul).

description

taste

Transcript of BAB II-B Tree

BAB II

BAB II

LANDASAN TEORI

2.1 Struktur Data Tree (pohon)

Tree (pohon) sebagai struktur data non linear yang banyak digunakan dalam aplikasi sehari-hari. Contoh aplikasi pohon yang dapat kita lihat sehari-hari adalah pengelolaan file dalam direktori penyimpanan. Tree sebagai struktur data non linear mempunyai dua sifat penting, yaitu terhubung dan tidak mengandung sirkuit. Pada Gambar 2.1, hanya G1 dan G2 yang tree, sedangkan G3 dan G4 bukan tree. G3 bukan tree karena ia mengandung sirkuit a, d, f, a, sedangkan G4 bukan tree karena ia tidak terhubung (dalam hal ini sisi (a, f) dan sisi (b, e) karena titik silangnya bukan menyatakan simpul).

Gambar 2.1 G1 dan G2 adalah tree, sedangkan G3 dan G4 bukan tree

Contoh tree lainnya, misalkan himpunan V = {a, A, b, B, c, C, d, D} adalah empat pasangan suami-istri, dimana a, b, c, dan d sebagai suami, dan A, B, C, D sebagai istri. Misalkan a bercerita lewat telpon kepada A, yang kemudian A menelepon B, C, dan D, selanjutnya B menelepon b, C menelepon c, dan D menelepon d. Prilaku tersebut dapat dilihat pada Gambar 2.2 di bawah ini.

Gambar 2.2 Tree penyebaran gossip

Sebuah tree dapat mempunyai hanya sebuah simpul tanpa sebuah sisi pun. Dengan kata lain, jika G = (V, E) adalah tree, maka V tidak boleh berupa himpunan kosong, namun E boleh kosong. Pada sebagian literatur, tree yang dikategorikan tree pada gambar 2.1 disebut juga free tree (pohon bebas). Untuk membedakannya dengan rooted tree (pohon berakar), maka rooted tree akan kita bahas lebih lanjut.

Tree juga seringkali didefinisikan sebagai graf tak-berarah dengan sifat bahwa hanya terdapat sebuah lintasan unik antara setiap pasang simpul. Tinjau kembali graf G1 pada Gambar 2.1. Setiap simpul di G1 terhubung dengan lintasan tunggal. Sebagai contoh, dari b ke f hanya ada satu lintasan, yaitu b, a, d, f. Dari c ke a hanya ada satu lintasan, yaitu c, d, e. Demikian juga untuk setiap pasang simpul manapun di G1. Selain itu, kita juga melihat bahwa di dalam tree, jumlah sisinya adalah jumlah simpul dikurangi satu. Tinjau G1 pada Gambar 2.1, jumlah simpul = 6 dan jumlah sisi = 5 (yaitu 6 1).

2.1.1 Istilah Dasar pada Tree

Secara sederhana sebuah tree bisa didefenisikan sebagai kumpulan dari elemen elemen yang disebut dengan node / vertex (simpul) dimana salah satu node disebut dengan root (akar), dan sisa node lain terpecah menjadi himpunan yang saling tidak berhubungan satu sama lain dan disebut dengan subtree / subtreees (pohon bagian). Jika kita melihat pada setiap subtree maka subtree juga mempunyai root dari subtree-nya masing masing.

Dengan melihat istilah dasar di atas, maka sebuah tree secara rekursif dapat didefenisikan sebagai berikut :

1. Sebuah node tunggal adalah sebuah tree.

2. Jika terdapat sebuah node N dan beberapa subtree N1, N2, N3, , Nk maka dari node N dan subtree yang ada kita bisa membentuk sebuah tree yang mempunyai root pada node N.

Sebuah node tunggal, N

Subtree N1, N2, N3, , Nk

7

Tree baru yang terbentuk dari node N dan subtree N1, N2, N3, , NkGambar 2.3 Contoh pembentukan Tree

Level

1

`Gambar 2.4 Contoh tree dengan 15 node

Seperti yang terlihat pada gambar 2.4 di atas, sebenarnya yang disebut dengan node itu adalah bagian dari tree yang berisikan data / informasi dan penunjuk percabangan. Tree pada gambar 2.4 berisi 15 node yang berisikan informasi berupa huruf A, B, C, D hingga huruf O lengkap dengan percabangannya masing masing, dimana tree ini mempunyai root pada node A.

Hubungan antara satu node dengan node lain bisa dianalogikan seperti halnya dalam sebuah keluarga, yaitu ada anak, bapak, saudara, dan lain lain. Dalam gambar 2.4 node A adalah bapak dari node B dan C, dengan demikian node B dan C ini bersaudara. Node D dan E adalah anak dari node B. Node C adalah paman dari node D dan E.

Level (tingkatan) suatu node ditentukan dengan pertama kali menentukan root sebagai tingkat pertama. Jika suatu node dinyatakan sebagai tingkat N, maka node yang merupakan anaknya dikatakan berada dalam tingkat N + 1. Gambar 2.4 menunjukkan contoh tree lengkap dengan level pada setiap node. Di samping defenisi di atas, ada juga beberapa buku yang menyebutkan bahwa root dinyatakan sebagai level 0 dan node lain dinyatakan mempunyai level 1 tingkat lebih tinggi dari root.

Selain level, juga dikenal dengan istilah degree (derajat) dari suatu node. Degree suatu node dinyatakan sebagai banyaknya anak atau turunan dari node tersebut. Sebagai contoh dalam gambar 2.4 node A mempunyai degree 2, node B mempunyai degree 2, dan node C mempunyai degree 3. Node lain F, H, I, J, K, L, N, dan O yang semuanya mempunyai degree 0 disebut juga dengan leaves (daun).

Leaf dan root tergolong external node (simpul luar), sedangkan selain node tersebut di atas disebut dengan internal node (simpul dalam).

Height / depth (ketinggian / kedalaman) dari suatu tree adalah tingkat maksimum dari suatu node dalam tree tersebut dikurangi dengan 1. Dengan demikian tree pada gambar 2.4 yang mempunyai root pada node A mempunyai height 4.

Ancestor (leluhur) dari suatu node adalah semua node yang terletak dalam suatu jalur dengan node tersebut mulai dari root sampai node yang ditinjau. Sebagai contoh ancestor dari node L gambar 2.4 adalah node A, C, dan G.

Descendant (keturunan) dari suatu node adalah semua node yang terletak tepat di bawah node tersebut. Sebagai contoh descendant dari node G pada gambar 2.4 adalah node L, M, N, dan O.

Predecessor dari suatu node adalah semua node yang berada pada level di atas dari level node tersebut. Sebagai contoh predecessor dari node G pada gambar 2.4 adalah node A, B, dan C.

Successor dari suatu node adalah semua node yang berada pada level di bawah dari level node tersebut. Sebagai contoh successor dari node G pada gambar 2.4 adalah node I, J, K, L, M, N, dan O.

Sibling dari suatu node adalah semua node yang berada pada level yang sama yang berasal dari node asal ( satu level di atas node yang ditinjau) yang sama dengan node tersebut. Sebagai contoh sibling dari node G pada gambar 2.4 adalah node F dan H.

2.1.2 Cara cara Penggambaran Tree

Ada beberapa cara dalam menggambarkan bentuk tree. Pertama adalah paling banyak digunakan dan paling mudah seperti ditunjukkan pada gambar 2.4. Kedua dengan menggunakan Diagram Venn. Gambar 2.5 menunjukkan bentuk Diagram Venn dari tree pada gambar 2.4.

Gambar 2.5 Diagram Venn dari t ree pada gambar 2.4

Ketiga adalah dengan menggunakan notasi kurung. Dengan notasi kurung tree pada gambar 2.4 bisa disajikan sebagai berikut :

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

Gambar 2.6 Notasi kurung dari t ree pada gambar 2.4

Keempat dengan menggunakan notasi tingkat. Notasi tingkat dari tree gambar 2.4 ditunjukkan pada gambar 2.7.

Gambar 2.7 Notasi tingkat dari tree pada gambar 2.4

Kelima hampir sama dengan cara keempat dimana perbedaan hanya pada penggunaan garis. Contoh tree dari gambar 2.4 dengan notasi tingkat sebagai berikut:

Gambar 2.8 Notasi garis dari tree pada gambar 2.4

2.2 Klasifikasi Tree

Pada umumnya tree dapat dibagi menjadi beberapa jenis, seperti binary tree, BST (Binary Search Tree), AVL (Adelson Velskii and Landis) Tree, IPR (Internal Path Reduction) Tree, heap tree, red black tree, 2 3 Tree, B Tree, dan lain - lain.

Dari antara beberapa jenis tree yang disebutkan di atas, penulis dalam tugas akhir ini hanya membahas mengenai binary tree, BST, AVL Tree, IPR Tree, 2 3 Tree, dan B Tree. Dengan alasan, adanya kemiripan beberapa prilaku dari tree tersebut dengan B- Tree.2.2.1 Binary Tree

Binary Tree (pohon biner) bisa didefenisikan sebagai suatu kumpulan node yang mungkin kosong atau mempunyai root dan paling banyak dua subtree (anak) yang saling terpisah yang disebut dengan left subtree (pohon bagian kiri / anak kiri / cabang kiri) dan right subtree (pohon bagian kanan / anak kanan / cabang kanan). Subtree bisa disebut juga dengan istilah branch (cabang).

Binary tree merupakan tipe yang sangat penting dari struktur data tree, dan banyak dijumpai dalam berbagai terapan. Lebih lanjut, dalam binary tree akan dibedakan antara left subtree dengan right subtree, sementara dalam struktur tree secara umum urutan ini tidak penting. Jadi binary tree merupakan bentuk tree yang beraturan. Karakteristik lain adalah bahwa dalam binary tree dimungkinkan tidak mempunyai node.

Gambar 2.8 menunjukkkan contoh suatu binary tree.

Gambar 2.8 Contoh binary tree

Pengertian leaf, parent, child, level, dan degree yang berlaku dalam tree juga berlaku dalam binary tree. Selain defenisi yang telah ada, dalam binary tree juga dikenal istilah complete binary tree (pohon biner lengkap) level N, yang didefenisikan sebagai sembarang binary tree dimana semua leaf nya terdapat pada level N dan semua node yang mempunyai level lebih kecil dari N selalu mempunyai left subtree dan right subtree.

Gambar 2.9 berikut ini merupakan contoh complete binary tree level 4, tetapi bukan complete binary tree level 5.

Gambar 2.9 Complete binary tree level 4

Selain istilah complete binary tree, juga ada istilah skewed binary tree (pohon biner miring), yaitu suatu binary tree yang banyaknya node dalam left subtree tidak seimbang dengan banyaknya node dalam right subtree. Gambar 2.10 menunjukkan right dan left skewed binary tree.

a.b.

Gambar 2.10 Contoh skewed binary tree (a) Skewed left (b) Skewed right

Dengan memperhatikan gambar sembarang binary tree, kita akan memperoleh tambahan informasi, yaitu banyaknya node maksimum pada level N adalah 2 (N-1). Sehingga banyaknya node maksimum sampai level N adalah :

2 (i-1) = 2 N 1

Dengan demikian untuk complete binary tree level 5, banyaknya leaf adalah 16 buah dan banyaknya node yang bukan leaf, termasuk root, adalah 15 buah.

2.2.1.1 Representasi Binary Tree (representasi pohon biner)

Pohon biner dapat disimpan (direpresentasikan) dengan array ataupun pointer dimana masing-masing representasi memiliki kelebihan dan kekurangan.

a. Representasi Pohon Biner dengan Array

Pohon biner dapat direpresentasikan dengan array dengan ketentuan sebagai berikut :

a. Akar (root) ditempatkan pada posisi 1 dalam array

b. Left subtree data yang ada pada posisi ke-i diletakkan pada posisi 2i

c. Right subtree - nya diletakkan pada posisi 2i + 1

Contoh: Misalkan pohon biner seperti gambar 2. 11 di bawah ini

Gambar 2.11 Pohon Biner dengan Jumlah Level 4

Sesuai dengan aturan pada gambar 2.11 di atas, maka jumlah data maksimum jika jumlah level = 4 adalah 15, sehingga kita menyediakan array dengan dimensi 15. Dengan demikian pohon di atas akan disimpan dalam array seperti Gambar 2.12 di bawah ini :

Gambar 2.12 Representasi Array untuk Pohon Biner pada Gambar 2.11

Kelemahan dengan representasi array adalah sulitnya memperhitungkan jumlah sel array yang harus disediakan untuk bentuk pohon biner yang belum diketahui, karena permintaan tempat dilakukan sekaligus dan di awal program serta tidak dimungkinkan menambah selama eksekusi program. Kemudian jika bentuk pohon tidak seimbang (misalkan miring kiri atau kanan) maka jumlah tempat yang terisi sangat sedikit dibandingkan dengan jumlah tempat yang sudah disediakan. Hal ini tentunya merupakan pemborosan. Di sisi lain representasi array memiliki keuntungan dalam waktu akses, karena array merupakan satu blok memori yang contiguous.

b.Representasi Pohon Biner dengan Linked List (pointer)

Dengan mempertimbangkan kelemahan representasi array, maka pilihan dengan linked list (pointer) menjadi lebih sesuai dengan kondisi riel. Pohon biner dengan representasi pointer hampir sama dengan double linked list sebelumnya dengan menggunakan dua buah pointer untuk setiap simpul yakni pointer kiri dan pointer kanan. Deklarasi pohon biner dengan defenisi ini dapat dituliskan dengan

Type

Pointer = ^Simpul;

Simpul = Record

Kiri: Pointer;

Data: TipeData; (*sesuai dengan kebutuhan; misalnya char, integer*)

Kanan : Pointer;

End;

PohonBiner = Pointer;

Dengan representasi linked list maka pohon pada Gambar 2.11 di atas dapat digambarkan sebagai berikut:

Gambar 2.13. Representasi Linked List untuk Pohon Biner pada Gambar 2.11

Dari Gambar 2.13 di atas pohon biner dengan nama T yaitu sebuah pointer yang menunjuk ke simpul yang berisi data A dengan pointer kiri menunjuk ke simpul yang berisi data B (sebagai cabang kiri dari A) dan pointer kanan menunjuk ke simpul yang berisi data C (sebagai cabang kanan dari A) dan seterusnya. Keuntungan representasi linked list dibandingkan dengan representasi array adalah jumlah tempat yang dibutuhkan bersifat fleksibel.

2.2.1.2 Binary Tree Traversal (Penelusuran Pohon Biner)

Pohon biner dapat ditelusuri dengan 4 cara yakni:

a. Preorder Traversal (Penelusuran Preorder)

b. Inorder Traversal (Penelusuran Inorder)

c. Postorder Traversal (Penelusuran Postorder)

d. Order by Level (Penelusuran Level demi Level)

a. Preorder Traversal (Penelusuran Preorder)

Pre artinya sebelum. Jadi pendaftaran parent dilakukan sebelum subtree - nya. Kemudian lakukan preorder terhadap left subtree dan right subtree. Sehingga kalau terhadap pohon pada Gambar 2.11 sebelumnya dilakukan penelusuran preorder diperoleh urutan sebagai berikut:

A, B, D, E, H, I, C, F, G

Rumus untuk preorder traversal adalah : Atas, Kiri (kalau ada), Kanan (kalau ada).

Gambar 2.14 Contoh binary tree

Dari binary tree gambar 2.14 pabila dilakukan preorder traversal akan menghasilkan data H, A, C, B, D, K, J, L dimana proses traversal ini bisa dilihat pada gambar 2.15.

Gambar 2.15 Proses Preorder traversal dari binary tree gambar 2.14

b. Inorder Traversal (Penelusuran Inorder)

In artinya di antara. Jadi pendaftaran parent - nya dilakukan di antara left subtree dan right subtree. Untuk menyelesaikan (menelusuri) left subtree dan right subtree dilakukan dengan cara Inorder juga. Sehingga kalau terhadap pohon pada Gambar 2.11 sebelumnya dilakukan penelusuran inorder diperoleh urutan sebagai berikut:

D, B, H, E, I, A, F, C, G

Rumus untuk inorder traversal adalah: Kiri (kalau ada), Atas, Kanan (kalau ada).

Jika dilakukan inorder traversal terhadap binary tree gambar 2.14, akan menghasilkan data H, A, C, B, D, K, J, L dimana proses traversal ini bisa dilihat pada gambar 2.17.

Gambar 2.17 Proses Inorder Traversal dari binary Tree gambar 2.16

c. Postorder Traversal (Penelusuran Postorder)

Post artinya setelah. Jadi pendaftaran parent - nya dilakukan setelah left subtree dan right subtree. Untuk menelusuri left subtree dan right subtree lakukan dengan cara postorder pula. Sehingga kalau terhadap pohon pada Gambar 2.11 di atas dilakukan penelusuran postorder diperoleh urutan sebagai berikut:

D, H, I, E, B, F, G, C, A

Rumus untuk Postorder Traversal adalah : Kiri (kalau ada), Kanan (kalau ada), Atas.

Jika dilakukan postorder traversal terhadap binary tree gambar 2.14, akan menghasilkan data B, D, C, A, J, L, K, H dimana proses traversal ini bisa dilihat pada gambar 2.18.

Gambar 2.18 Proses Postorder Traversal dari binary tree gambar 2.16

d. Order by Level / Levelorder (Penelusuran Level demi Level)

Penelusuran dengan cara ini dilakukan mulai dari root kemudian pendaftaran level demi level dari kiri ke kanan. Sehingga kalau terhadap pohon pada Gambar 2.11 di atas dilakukan penelusuran by level diperoleh urutan sebagai berikut:

A, B, C, D, E, F, G, H, I

Jika dilakukan levelorder traversal terhadap binary tree gambar 2.14, akan menghasilkan data H, A, K, C, J, L, B, D.

2.2.2 Binary Search Tree (BST)

Binary Search Tree (BST) adalah pohon biner yang berisi elemen sejenis dan unik dengan sifat khusus sebagai berikut:

Misalkan diketahui sebuah pohon biner dengan akar X serta sub pohon kiri T1 dan sub pohon kanan T2 seperti Gambar 2.19 di bawah ini:

Gambar 2.19 Bentuk Pohon Biner dengan Akar X dan sub Pohon T1 dan T2

Binary tree di atas disebut pohon pencarian biner (BST) jika syarat-syarat berikut dipenuhi:

1. (Y T1 < X < (Z T2 dimana T1 dan T2 juga BST

2. Apabila dilakukan Inorder Traversal akan diperoleh urutan naik

3. Binary tree dengan 1 elemen dan pohon kosong adalah bentuk khusus BST

Pohon dengan sifat di atas disebut dengan pohon pencarian biner (BST) naik. BST turun dengan mudah didefinisikan dengan mengubah sifat-sifat di atas sebagai berikut:

1. (Y T1 > X > (Z T2 dimana T1 dan T2 juga BST

2. Apabila dilakukan Inorder Traversal akan diperoleh urutan turun

3. Binary tree dengan 1 elemen dan pohon kosong adalah bentuk khusus BST

BST pada prinsipnya tidak membiarkan adanya duplikasi elemen, sehingga BST adalah struktur yang merupakan set (himpunan).

Untuk jelasnya, dapat dilihat pada dua buah binary tree berikut ini yang memenuhi kriteria pembuatan di atas.

a.b.

Gambar 2.20 Contoh binary tree (a) Skewed left (b) Skewed right

Dari kedua binary tree pada gambar 2.20 bisa dilihat bahwa proses pencarian data secara umum akan lebih cepat dilaksanakan pada tree pertama (gambar 2.20.a) dibandingkan dengan tree kedua (gambar 2.20.b). Sebagai contoh untuk mencari bilangan 18, pada tree pertama cukup dilaksanakan satu kali perbandingan, sedangkan pada tree kedua, perlu dilakukan lima kali perbandingan, sama halnya untuk mencari bilangan 23 dimana tree pertama memerlukan tiga kali perbandingan, sedangkan tree kedua memerlukan tujuh kali perbandingan. Dari kedua contoh tersebut dapat dilihat bahwa pencarian pada tree pertama lebih cepat dilaksnakan dibanding pencarian pada tree kedua. Perbedaan akan semakin nyata apabila banyaknya data yang diketahui semakin banyak.

2.2.2.1 Representasi BST

Pohon biner pada prinsipnya bisa saja direpresentasikan sebagai array dengan ketentuan akar akan menempati posisi 1 dan left subtree - nya menempati posisi 2 sedangkan right subtree - nya menempati posisi 3 dan seterusnya. Dengan demikian jika node X menempati posisi I maka left subtree X menempati posisi 2I sementara right subtree - nya menempati posisi 2 I + 1. Dengan demikian jika pohon biner memiliki tinggi = h, maka jumlah lokasi yang dibutuhkan harus disediakan sebanyak 2h 1. Akan tetapi dengan representasi array jumlah elemen terbatas, serta apabila pohon miring ke kanan dengan tinggi h maka jumlah sel yang terisi hanya sebanyak h dari 2h 1 yang disediakan. Ini adalah pemborosan. Untuk mengatasi hal ini maka pohon biner umumnya dan BST khususnya dapat direpresentasikan dengan menggunakan pointer. Setiap node (simpul) dinyatakan sebagai record yang terdiri dari 3 field yaitu: Pointer ke left subtree, data dan pointer ke right subtree seperti terlihat pada Gambar 2.21 berikut ini:

Gambar 2.21 Representasi Node dengan Dua Pointer Ki dan Ka

Secara lengkap deklarasi BST dapat dituliskan sebagai berikut:

Type

Pointer = ^Simpul;

Node = Record

Ki : Pointer; (* pointer ke left subtree *)

Data : TipeData; (* TipeData tentukan sendiri *)

Ka : Pointer (* pointer ke right subtree *)

End;

BST = Pointer;

Deklarasi di atas dapat digunakan baik untuk BST naik maupun BST turun, yang membedakannya hanya pada saat pemasukan data ke dalam BST. Dari deklarasi di atas, apabila kita meng-copy BST ke variabel lain misalkan T, kemudian misalkan pohon T berisi data 2,5,7,11 dan 13 dengan akar 7, dan misalkan T adalah BST naik maka salah satu bentuk pohon T dapat digambarkan berikut ini:

Gambar 2.22 BST T dengan Elemen 2, 5, 7, 11, 13 dan Akar 7

Pohon T di atas disebut pohon dengan tinggi = 3. Kita dapat memiliki bentuk pohon yang lain dengan akar = 7 dan tinggi = 3. Salah satunya seperti Gambar 2.23 berikut:

Gambar 2.23 Bentuk BST T yang lain berisi 2, 5, 7, 11, 13 dengan Akar 7

2.2.2.2 Operasi-Operasi dalam BSTSama seperti struktur data lainnya, maka terhadap BST kita dapat mendefinisi-kan sejumlah operasi dasar seperti:

1. Mengosongkan BST

2. Mencek apakah BST kosong

3. Memasukkan data baru ke dalam BST

4. Mencari elemen tertentu dalam BST

5. Menghapus data tertentu dari dalam BST

6. Menampilkan semua elemen dalam BST

Jadi BST dapat dijelaskan dengan spesifikasi berikut:

Spesifikasi :Tipe Data Terstruktur BST

Domain : Himpunan elemen dengan tipe data pilihan pemakai (Mis: char, Integer, Record dll)

Operasi : Misalkan kita definisikan 6 operasi seperti di atas yaitu :

1. Operasi Mengosongkan BST / Menciptakan BST Baru T = Makenul(T) : Suatu prosedur yang menyebabkan T menjadi BST kosong

Tujuan: Untuk Menciptakan BST pertama sekali atau mengosongkan BST T yang sudah terisi. Walaupun yang terakhir ini tidak dianjurkan

Sebelum: BST T berisi atau sama sekali belum pernah ada

Sesudah: BST T yang tadinya berisi menjadi kosong atau Membuat BST T yang baru

2. Operasi Cek Kosong BST T = Empty(T) : Suatu fungsi yang menghasilkan nilai True jika T kosong atau nilai False jika T tidak kosong

Tujuan: Untuk Mengetahui apakah BST T kosong atau tidak

Sebelum: tidak ada

Sesudah: BST T tidak berubah, tetapi hanya menghasilkan nilai Benar (True) atau Salah (False)

Operasi ini perlu dilakukan sebelum melakukan operasi-operasi seperti: Menghapus, Mencari, atau Menampilkan

3. Operasi Memasukkan data baru = Insert(x, T): suatu prosedur yang memasukkan x ke dalam BST

Tujuan: Untuk menyisipkan x (elemen baru) ke dalam BST

Sebelum: tidak ada

Sesudah: BST T sebelumnya ditambah x sebagai elemen baru

4. Operasi Cari = Member (x,T) : Suatu fungsi yang mencari apakah x ada di dalam BST T atau tidak. Fungsi ini menghasilkan nilai Boolean

Tujuan : Mencari x di dalam BST TSebelum: BST sudah pernah ada

Sesudah: BST T tidak berubah, hanya menghasilkan True jika x ditemukan dan False jika tidak

5. Operasi Hapus = Delete (x,T) : Suatu prosedur yang menghapus elemen x dari dalam BST T jika ditemukan dan Pesan kesalahan jika x tidak ditemukan

Tujuan : Menghilangkan x dari dalam BST T

Sebelum: BST T tidak kosong

Setelah: BST mungkin berubah mungkin juga tetap. Jika x ditemukan dalam T maka setelah operasi diperoleh T tanpa x, tetapi jika x tidak ditemukan maka T tetap

6. Operasi Tampil = Tampil(T) : Suatu prosedur untuk mendaftarkan elemen yang dimiliki BST T. Metode pendaftaran dapat dilakukan dengan cara Preorder, Inorder atau Postorder.

Tujuan : Menampilkan semua elemen dalam BST TSebelum: BST T tidak kosong

Sesudah: Tidak mengubah BST T

Berikut ini didefinisikan dan dijelaskan masing-masing operasi di atas dan selengkapnya dapat dilihat pada program BST di akhir dari Bab ini. Operasi-operasi berikut dan Program BST yang disediakan adalah untuk BST naik. Untuk BST turun diberikan sebagai latihan.

1. Procedure Makenul (T: BST);

Begin

T := Nil;

End;

2. Function Empty(T : BST) : Boolean;

Begin

Empty := (T = Nil)

End;

Kedua operasi di atas cukup jelas

3. Procedure Insert(x : TipeData; Var T : BST);

Begin

If T = Nil Then(* Jika ditemukan T yang nil *)

Begin

New(T);(* ciptakan node baru ditunjuk oleh T *)

T^.Ki := Nil;(* Set pointer kiri = nil *)

T^.Data := x;(* Isi data pada node = x *)

T^.Ka := Nil; (* Set pointer kanan = nil *)

End

Else If x = T^.Data Then (* x sudah ada dalam T *)

Writeln(Error : data tersebut sudah ada *)

Else If x < T^.Data Then

Insert(x, T^.Ki) (*jika x < data yg ditunjuk T, maka sisipkan x ke kiri*)

Else (* x > data yang ditunuk T sisipkan x ke kanan *)

Insert(x, T^.Ka)

End;

4. Function Member (x: TipeData, T : BST) : Boolean;

Begin

If T = Nil Then

Member := False

Else If x = T^.Data Then

Member := True (* x ditemukan *)

Else If x < T^.Data Then

Member := Member(x, T^.Ki) (*cari x ke kiri *)

Else (*x > T^.Data *)

Member := Member(x, T^.Ka) (* cari secara rekursif ke kanan *)

End;

5. Procedure Delete (x : TipeData; Var T : BST);

Var Bantu : Pointer;

Begin

If T = Nil Then

Writeln(Error : , x, tidak ditemukan )

Else If x < T^.Data Then

Delete(x, T^.Ki) (* rekursif ke kiri *)

Else If x > T^.Data Then

Delete(x, T^.Ka) (*rekursif ke kanan *)

Else (*x ditemukan *)

If (T^.Ki = Nil And T^.Ka = Nil) Then (*Kasus x adalah daun *)

Begin

Bantu := T; (*Tangkap node dengan pointer Bantu *)

T:=Nil;(*potong T yang tadinya menunjuk node berisi x *)

Dispose(Bantu) (*deallocate Bantu atau lepaskan node *)

End

Else If (T^.Ki = Nil) Then (*x berada pada node dimana kirinya nil *)

Begin

Bantu := T;

T := T^.Ka; (* Set T = pointer kanannya *)

Bantu^.Ka := Nil (*putuskan hubungan node dengan kanannya *)

Dispose (Bantu) (*lepaskan node berisi x *)

End

Else If (T^.Ka = Nil) Then (*x berada pada node dimana kanannya nil *)

Begin

Bantu := T;

T := T^.Ki ; (* Set T = pointer kirinya *)

Bantu^.Ki := Nil; (*putuskan hubungan node dengan kirinya *)

Dispose (Bantu) (* lepaskan node yang berisi x *)

End

Else (* pointer kiri dan kanan T tidak kosong *)

T^.Data := DeleteMin(T^.Ka)

End;

Khusus untuk kasus yang terakhir dimana pointer kiri dan pointer kanan dari T tidak kosong atau tidak nil, maka yang dilakukan adalah mencari pengganti. Untuk pengganti dapat diambil maksimum dari kiri atau minimum dari kanan. Dalam operasi delete di atas yang dipilih adalah minimum dari sub pohon kanan. Untuk data pengganti yang diambil maksimum dari sub pohon kiri ditinggalkan sebagai latihan bagi pembaca. Definisi dari DeleteMin dapat dilihat berikut ini:

Function DeleteMin (Var A : BST) : TipeData;

Var Bantu : Pointer;

Begin

If T^.Ki = Nil Then (*ditemukan data terkecil *)

Begin

Bantu := T ;(*tangkap node yang berisi data terkecil *)

DeleteMin := T^.Data; (*Ambil&simpan data terkecil *)

T := T^.Ka; (* Set T = pointer kanannya *)

Bantu^.Ka := Nil; (*lepaskan hubungan node tsb dgn anaknya *)

Dispose (Bantu) (*lepaskan node yang berisi data terkecil *)

End

Else

DeleteMin := DeleteMin(T^.Ki) (*rekursif ke kiri *)

End;

6. Procedure Tampil(T);

Var Pilih : Integer;

Begin

Clrscr;

Writeln(1. Tampil Secara Preorder);

Writeln(2. Tampil Secara Inorder);

Writeln(3. Tampil Secara Postorder);

Writeln;

Write(Silahkan Pilih : ); Readln(Pilih);

If (Pilih = 1) Then

Preorder(T)

Else If (Pilih = 2) Then

Inorder (T)

Else

Postorder(T);

Readln

End;

2.2.3 AVL Tree

AVL Tree merupakan salah satu bentuk dari balanced BST dan nama AVL diambil dari nama penemunya masing masing, yaitu Adelson, Velskii, dan Landis pada tahun 1962.

AVL Tree adalah suatu BST dimana setiap node yang mempunyai left subtree dan right subtree, mempunyai sifat bahwa perbedaan height (tinggi) antara left subtree dan right subtree maksimal adalah 1 (satu).

Untuk menunjukkan bahwa binary tree termasuk AVL Tree atau tidak dilakukan dengan melihat masing masing node pada binary tree tersebut dan lakukan pengecekan apakah node tersebut seimbang atau tidak.

Suatu node dikatakan seimbang atau tidak, dapat dilakukan dengan mengurangkan height dari left subtree dengan height dari right subtree dan nilai keseimbangan dari setiap node yang didapat disesuaikan dengan kriteria sebagai berikut :

Fk (balanced factor) = (height left subtree( - (height right subtree(Suatu BST merupakan AVL, apabila fk (balanced factor) setiap node pada BST bernilai 0, -1, atau 1.

[http://www.cs.ust.hk/~lauhl/comp171/lab8.html]2.2.3.1 New Node Insertion (Menyisipkan Node Baru)

Dalam melakukan proses insert node baru pada AVL Tree perlu diperhatikan bahwa urutan informasi pada tree tidak boleh berubah atau dengan kata lain inorder traversal harus tetap dipertahankan.

Jika suatu node dimasukkan pada AVL Tree, maka nilai keseimbangan dari setiap node pada tree akan berubah, oleh karena itu perlu dilakukan perhitungan ulang pada setiap untuk mengecek keseimbangan. Apabila terdapat node yang tidak seimbang, maka perlu dilakukan proses penyeimbangan. Terdapat dua kemungkinan perubahan nilai tersebut, antara lain :

1. Tree yang sudah AVL apabila ditambah sebuah node baru, misalnya 3 pada right subtree dari 2, akan membuat tree tersebut tetap AVL.

Gambar 2.24 Kemungkinan perubahan insert node baru pertama

2. Tree tersebut sudah AVL, apabila ditambah sebuah node baru yang mengkibatkan tree menjadi miring ke kiri atau ke kanan (tidak seimbang), misalnya 3 ditambahkan pada left subtree dari 1, subtree 2 menjadi miring ke kiri.

Gambar 2.25 Kemungkinan perubahan insert node baru kedua

Proses penyeimbangan pada sebuah tree dapat terjadi dalam dua kasus dan masing masing bisa dibagi lagi dalam dua sub kasus yang serupa. Kasus pertama disebut dengan single rotation (pemutaran tunggal) dan kasus kedua disebut dengan double rotation (pemutaran ganda). Pemutaran tunggal dibagi menjadi LL Rotation (pemutaran tunggal ke kiri) dan RR Rotation (pemutaran tunggal ke kanan). Pemutaran ganda dibagi menjadi LR Rotation (pemutaran ganda kiri dan kanan), dan RL Rotation (pemutaran ganda kanan dan kiri).

2.2.3.1 Pivot Point

Pivot point adalah node yang mempunyai nilai keseimbangan lebih besar dari 2 atau lebih kecil dari -2, yang letaknya paling dekat dengan node baru yang telah dimasukkan, misalnya 5. Node pada pivot point beserta dengan subtree nya merupakan bagian yang akan diseimbangkan kembali dalam sebuah AVL Tree, jadi dalam proses penyeimbangan kembali sebuah tree tidak perlu dirubah seluruh struktur tree tersebut, tetapi hanya struktur tree yang dimulai dari node pivot point saja.

Gambar 2.26 Pivot Point

Pada gambar 2.26 di atas, awalnya tree tidak mengandung pivot point, tetapi setelah ditambah dengan node baru, yaitu node 5 akan muncul pivot point pada node 40 dan bukan pada node 60 karena node 40 merupakan node yang paling dekat dengan node baru tersebut. Jadi proses penyeimbangan yang akan dilakukan hanya berpengaruh pada subtree mulai dari node 40.

2.2.3.2 Single Rotation

Proses single rotation dapat dibagi dua menjadi LL Rotation dan RR Rotation dan proses skemanya dapat dilihat pada gambar 2.27 dan gambar 2.28 di bawah ini.

0

Gambar 2.27 Skema LL Rotation

Pada gambar 2.27, proses perputaran dilakukan kearah kiri dikarenakan right subtree pada node r lebih berat dibandingkan left subtree. Proses perputaran akan membuat node x menjadi root menggantikan node r dan node T2 akan berpindah menjadi milik node r. Hasil akhir proses perputaran ini akan didapatkan suatu tree yang seimbang.

Gambar 2.28 Skema RR Rotation

Proses RR Rotation hampir sama dengan proses LL Rotation, dimana perbedaannya hanyalah pada posisi dimana untuk RR Rotation node pada left subtree lebih berat dibanding right subtree. Oleh karena itu, proses perputaran akan berputar ke kanan untuk menyeimbangkannya.

2.2.3.3 Double Rotation

Kasus kedua dalam melakukan pemutaran adalah double rotation. Suatu binary tree yang memerlukan double rotation dapat dilihat pada skema di bawah ini.

Gambar 2.29 Skema LR Rotation

Pada LR Rotation proses rotasi dilakukan sebanyak dua kali yaitu pertama dilakukan RR Rotation terhadap left subtree dari node r dan dilanjutkan dengan LL Rotation. Hasil perputaran ini akan mengakibatkan node w menjadi node root.

Proses RL rotation sama seperti LR Rotation dimana perbedaan hanya pada posisi perputaran, seperti terlihat pada gambar 2.30.

Gambar 2.30 Skema RL Rotation

2.2.3.2 Menghapus node

Menghapus node lebih sulit dilakukan dibanding memasukkan node baru, terutama dalam hal mengatur kembali posisi posisi node. Tetapi secara garis besar dapat dikatakan bahwa jika suatu node dihapus, kecuali node yang bertindak sebagai leaf, maka posisinya akan diganti oleh node lain yang merupakan urutan sebelumnya apabila dibaca secara inorder (atau node paling maksimum dari subtree kiri).

Seperti halnya pada memasukkan node baru, setelah suatu node dihapus, maka kondisi setiap node dalam tree perlu dicek untuk meyakinkan keadaan seimbangnya. Jika dijumpai pada node yang left subtree dan right subtree nya tidak seimbang, maka pada node tersebut perlu dilakukan penyeimbangan kembali dengan salah satu bentuk penyeimbangan.

2.2.4 IPR Tree

IPR Tree adalah sebutan singkat untuk Internal Path Reduction Trees, yang dikenalkan oleh Gonnet, yang merupakan salah satu bentuk BST dimana subtree dari sebuah node-nya mempunyai height yang hampir sama dengan cara mengubah panjang internal path - nya.

Penggunaan dengan IPR Tree tidaklah terlalu buruk dibanding dengan AVL Tree, bahkan lebih baik untuk beberapa kasus.

Penampakan strukturnya selalu lebih baik daripada struktur AVL Tree, dan menggunakan parameter yang lebih mudah untuk memastikan nilai faktor keseimbangan dengan memeriksa apakah sebuah binary tree sudah seimbang.

Parameter yang digunakan untuk menentukan keseimbangan disebut panjang internal path dari suatu tree, yang ditegaskan menjadi jumlah depth dari semua node pada tree.

Gambar 2.31 Binary Tree

Binary Tree di atas mempunyai panjang internal path 15 (dengan root adalah satu). Panjang internal path dari suatu tree sama nilainya dengan penjumlahan pemeriksaan kembali nilai node perlevel sebanyak satu kali pada tree tersebut. Dengan mengurangi panjang internal path dari tree, kita juga mengurangi nilai node perlevel, sehingga cukup memerlukan waktu.

2.2.4.1 IPR Transformation

Seperti AVL Tree, IPR Tree mempunyai empat kemungkinan (lihat gambar 2.32.a, b, c, dan d) untuk perpindahan. Pada gambar 2.32.a dan 2.32.b bisa digunakan ketika tree dalam keadaan MR (more nodes to the right) dan dua gambar lainnya, yaitu gambar 2.32.c dan 2.32.d dimungkinkan terjadi jika tree dalam keadaan ML (more nodes to the left).

Cara menghitung panjang internal path yang sederhana yaitu dengan mengurangi count (nilai) node dalam sebuah subtree. Perhitungan akan lebih cepat dengan menggunakan komputer dibanding secara manual. Jika kita mengubah tree seperti gambar 2.32.a, berarti kita mengurangi panjang internal path dari tree dengan cara nc na, dimana nc adalah jumlah node dalam subtree c (dilambangkan dengan sebuah gambar segitiga) dan na adalah jumlah node dalam subtree a.

(a)

(b)

(c)

(d)

Gambar 2.32 Internal Path Reduction Transformation

Panjang internal path dari tree sebelum perpindahan pada kondisi single rotation (gambar 2.32.a dan gambar 2.32.c) adalah :

Ia + na + Ib + 2nb + Ic + 2nc + 3

Ia, Ib, dan Ic masing masing adalah panjang internal path dari subtree a, b, dan c. Nilai Na dimasukkan sejak extra level (tingkat yang lebih tinggi) dijelajahi ketika mengakses sejumlah node dalam subtree a melalui node x. Nilai Nb dikalikan dengan 2, jika 2 level dari root pada subtree b ke node x. Tambahkan nilai 3 untuk internal path dari node x dan y. Dalam penggunaan ekspresi ke contoh binary tree, kita memperoleh hasil 15 untuk panjang internal path. Setelah pergeseran, panjang internal path nya menjadi :

Ia + 2na + Ib + 2nb + Ic + nc + 3

Perbedaan antara panjang internal path setelah perpindahan sebelum adalah :

nc naJadi panjang internal path akan berkurang jika nc na > 0, atau sama, jika

nc > na

Struktur binary tree diperlihatkan dahulu ke single rotation pada gambar 2.32.a adalah binary tree yang sama seperti diperlihatkan sebelum double rotation pada gambar 2.32.b. Pemberian struktur binary tree diperiksa untuk dua tipe perpindahan, kemudian menjadi sebuah perbedaan dalam dua struktur dalam perluasan subtree b dalam gambar 2.32.a.

Gambar 2.33 Node bke dalam struktur

Gambar 2.34 Subtree dengan leaf b1 dan b2untuk gambar 2.32.b, maka nb sama dengan nb1 + nb2 + 1. Untuk keterangan lebih jelas dalam gambar 2.32.b dimana subtree b lebih dekat dengan struktur tengah daripada subtree a. Hasilnya, subtree b1 dipindahkan ke satu arah dan subtree b2 dipindahkan terpisah dengan arah yang lain selama perpindahan.

Ulangilah analisis untuk binary tree dalam 2.32.b, kita memperoleh panjang internal path sebelum perpindahan menjadi :

Ia + na + Ib1 + 3nb1 + Ib2 + 3nb2 + Ic + 2nc + 6

Internal path untuk tree setelah perpindahan adalah :

Ia + 2na + Ib1 + 2nb1 + Ib2 + 2nb2 + Ic + 2nc + 5

Perbedaan antar internal path setelah dan sebelum perpindahan adalah :

nb1 + nb2 na + 1

Kriteria penggunaan double rotation :

nb1 + nb2 na + 1 > 0

Jika nb1 + nb2 + 1 diletakkan oleh nb, dengan criteria yang dapat dituliskan sebagai :

nb > na

Jika keduanya, single dan double transformation (perpindahan tunggal dan ganda) dimungkinkan pada satu node dalam tree, single transformation digunakan lebih sederhana. Kriteria keseimbangan diperiksa pada setiap node dalam binary tree pada parent dari node yang dimasukkan ke root node pada binary tree yang lengkap. Berbeda dengan AVL Tree, IPR Tree menuntut lebih dari satu transformation (perpindahan/ pergeseran).

Jika satu transformation terjadi, kita masih memeriksa ketidaksetimbangan tree pada parent dari root yang terdahulu / sebelumnya. Lanjutkan pemeriksaan hingga kita tiba pada root node pada tree yang lengkap. Diperlukan pemeriksaan keseimbangan IPR dari left descendant baru pada root dari perpindahan subtree setelah single left rotation, right descendant baru setelah right rotation dan keduanya descendant baru dari double rotation . Algoritma IPR Insertion dapat dilihat pada algoritma berikut.

Catatan : Perbedaan arti dalam menetapkan ketidaksetimbangan pada IPR Tree dengan AVL Tree yaitu IPR Tree menggunakan count dari node pada subtree sedangkan AVL Tree menggunakan height dari subtree.

2.2.4.2 IPR Insertion

Algoritma IPR Insertion ini dalam mengimplementasikan secara berulang atau dengan penyimpanan pada record (kumpulan dari node dan pointer), lokasi dari node yang memerlukan penambahan proses.

IPR-Insertion (x)

1 Insert record ke dalam IPR Tree dengan BST insertion procedure

2Setiap node pada path dari parent pada record yang baru dimasukkan ke dalam root dari tree

aMenetapkan jika gabungan subtree mempunyai beberapa MR atau ML (atau tidak ada).[untuk mengetahui apakah menggunakan left atau right rotation]

bIf nc > na then

1Gunakan single rotation pada arah yang tepat

2Setelah sebuah left / right rotation, periksa subtree dari left / right descendant yang baru dari root pada transformation subtree untuk kesetimbangan. Jika tidak seimbang, pindah dan ulangi test dan gunakan rotation tambahan.

CElse if nb > na then

1Gunakan double rotation dengan arah yang tepat

2Periksa keduanya, descendant baru untuk kesetimbangan dan ulangi penggunaan rotation yang diperlukan

Seperti AVL Tree, insertion digunakan dalam sifat yang sama dengan BST hingga muncul keseimbangan. Untuk lebih jelas, terlihat pada contoh berikut.

Jika Jefferson dan Hampton tanpa menuntut perpindahan, dan tidak dilakukan pemeriksaan ketidakseimbangan, maka diperoleh paling sedikit tiga level dalam tree jika Greenville ditambahkan, dan IPR Tree menjadi :

Gambar 2.35 ML Tree dengan input node Greenville

Hasil binary tree adalah kasus ML Tree dengan Jefferson sebagai node X dan Hampton sebagai node Y pada gambar 2.32.c sebelumnya. Sehingga jika nc > na, dimana selisih keduanya adalah nol, maka tree berada dalam ketidakseimbangan, sehingga tree akan digeser ke kanan sekali untuk menyeimbangkannya menjadi :

Gambar 2.36 Balanced Tree (tree seimbang menurut gambar 2.32.c)

Right descendant dari Hampton seimbang, maka tidak diperlukan pergeseran lebih jauh lagi. Ketika Ahoskie ditambahkan, binary tree nya menjadi :

Gambar 2.37 Binary Tree dengan Input Node Ahoskie

Tree ini dibandingkan dengan contoh dari ML Tree, tetapi jika tidak nc maupun nb > na, maka tidak diperlukan pergeseran. Kemudian Gurnsey ditambahkan., hasil binary tree menjadi :

Gambar 2.38 Binary Tree dengan Input Node Gurnsey

Jika masih ML Tree, untuk alasan yang sama dengan sebelumnya , pergeseran tidak diperlukan. Ketika Boone ditambahkan, binary tree menjadi :

Gambar 2.39 Binary Tree dengan Input Node Gurnsey

Pemeriksaan keseimbangan dimulai pada tree dengan Ahoskie sebagai root, tetapi Karena masih terdiri dari dua node, termasuk Boone yang baru dimasukkan jelas masih tidak seimbang. Diperlukan test untuk ketidakseimbangan pada subtree tersebut dengan Greenville sebagai root. Subtree ini menjadi ML, dan tidak memerlukan pergeseran. Tetapi dalam penambahan, diperlukan pemeriksaan ketidakseimbangan pada root tree (Hampton). Di sini, tree juga dalam keadaan ML, tetapi karena nc > na, maka digunakan single rotation ke kanan untuk memperbaiki susunannya :

Gambar 2.40 Balanced Tree dengan Greenville sebagai root

Setelah memeriksa right descendant dari Greenville untuk keseimbangan, lanjutkan dengan penambahan Gusey dan Hamilton, hasil tree adalah :

Gambar 2.41 Binary Tree dengan Input Node Gusey dan Hamilton

Mulailah pemeriksaan jalur untuk node yang barusan dimasukkan dengan Hamilton sebagai key (kunci). Pertama, dengan memeriksa keseimbangan dari subtree yang dimulai dari Gusey, kemudian Gurnsey sebagai root. Subtree lanjut ini dalam kondisi MR. Jika nc > na, gunakan single rotation ke kiri untuk membuat subtree kembali seimbang.

Gambar 2.42 Binary Tree dengan Input Node Gusey dan Hamilton Setelah Single Rotation ke Kiri

Pohon pada gambar 2.42 adalah AVL dengan internal path (IP) 22. Jika subtree dengan Gurnsey sebagai root telah seimbang, maka tidak diperlukan penambahan pergeseran. Subtree dengan Hampton sebagai root masih dalam keadaan ML yang seimbang. Tetapi jika dilihat dari tree secara keseluruhan, masih dalam keadaan MR, maka tree tidaklah seimbang dengan nb > na. Maka dipergunakan double rotation, pertama right pivot, kemudian left pivot, maka hasil dari tree adalah:

Gambar 2.43 Balanced Binary Tree dengan Input Node Gusey dan Hamilton

Pohon pada gambar 2.43 adalah AVL dengan IP 21, dan merupakan pohon IPR. Pemeriksaan dilakukan pada kedua descendant dari Gusey untuk menentukan apakah termasuk IPR Tree yang seimbang. Dari contoh di atas, rata rata yang diperoleh dengan IPR Tree lebih baik dibanding menggunakan AVL Tree karena panjang internal path yang diperoleh lebih kecil. Yaitu dengan adanya penggunaan pergeseran sebuah subtree dengan kondisi ML atau MR pada tree, untuk menggeser subtree penuh ke subtree yang agak kosong. Sehingga panjang internal path dapat dikurangi.

2.2.5 2 3 Tree

Berbeda dengan BST yang selalu bermasalah pada keseimbangan, 2 3 Tree ini merupakan tree yang selalu berada dalam kondisi keseimbangan.

Adapun sifat sifat yang dimiliki oleh 2 3 Tree diantaranya :

1. Faktor percabangan minimal 2 (dua) node, maksimal 3 (tiga) node.2. Data pada 2 3 Tree selalu disimpan pada leaf.

3. Pada internal node 2 3 Tree hanya berisi record key.

4. Jika isi leaf node dibaca dari kiri ke kanan diperoleh urutan menaik.

5. Tree kosong dan tree dengan satu data adalah bentuk khusus dari 2 3 Tree.

2.2.5.1 2 3 Tree Searching (Pencarian dengan 2 3 Tree)

Algoritma pencarian X pada 2 3 Tree :

2 3 Tree Searching1. If X < key of first record, cari ke cabang pertama.

2. If else X = key of first record, data ditemukan.3. If else X > key of first record & X < key of second record, cari ke cabang dua.

4. If else X > key of second record, cari ke cabang tiga.

5. Else X = key of second record, data ditemukan.

Gambar 2.44 2 3 Tree dengan tiga percabangan

Bila diketahui 2 3 Tree seperti di atas, dan dilakukan pencarian terhadap data yang tersimpan dan data yang tidak tersimpan dalam 2 3 Tree tersebut, maka analisisnya dapat dilihat pada contoh 1 dan 2 berikut.

Contoh 1 :

Jika search for X = 7, maka langkah pencarian sebagai berikut :

X > 5 & X < 11 => cari ke cabang 2

X = 7 => data ditemukan

Contoh 2 :

Jika search for X = 9, maka langkah pencarian sebagai berikut :

X > 5 & X < 11 => cari ke cabang 2

X = 9 => data tidak ditemukan

Gambar 2.45 2 3 Tree dengan dua percabangan

Bila diketahui 2 3 Tree seperti di atas, dan dilakukan pencarian pada data yang tersimpan dan data yang tidak tersimpan dalam 2 3 Tree tersebut, maka analisisnya dapat dilihat pada contoh 3 dan 4.

Contoh 3 :

Jika search for X = 2, maka langkah pencarian sebagai berikut :

X < 7 => cari ke cabang 1

X = 2 => data ditemukan

Contoh 4 :

Jika search for X = 4, maka langkah pencarian sebagai berikut :

X < 7 => cari ke cabang 1

X > 3 & X < 5 => cari ke cabang 2

X = 4 => data tidak ditemukan

2.2.5.2 2 3 Tree Insertion (Penyisipan data dalam 2 3 Tree)

Algoritma insert X pada 2 3 Tree :

1. 2 - 3 Tree Insertion2. If X key of first record, insert ke cabang pertama.

If jumlah external node = 3, maka lanjutkan ke cabang kedua.

3. If else X key of first record & X key of second record, cari ke cabang dua.

If jumlah external node = 3, maka lanjutkan ke cabang ketiga.

4. If else X > key of second record, cari ke cabang tiga.

If jumlah external node = 3, maka bentuk level baru.

Contoh :

Jika insert for X = 10, maka langkah penyisipan sebagai berikut :

X > 5 & X < 11

X > 7 => leaf ketiga kosong, maka sisipkan data pada anak ketiga, atau

X < 13 => leaf ketiga kosong, maka geser leaf kedua ke leaf ketiga, dan leaf pertama ke leaf kedua, sisipkan data pada leaf pertama dengan disertai perubahan key pada external nodenya.

Gambar 2.46 Penyisipan node 10 pada 2 3 Tree

2.2.6 B Tree

B Tree merupakan salah satu struktur data terpenting dalam ilmu komputer, karena ketidakterbatasannya dan penggunaanya yang berkarakteristik. BTree merupakan suatu pilihan yang tepat untuk menyimpan data yang harus diakses bersamaan secara berurut dan langsung.

Comer menguraikan B Tree sebagai ubiquitous (yang berarti bersifat di mana mana; hadir di mana mana). Sifatnya yang ubiquitous mungkin merupakan akibat dari penggunaanya. Menurut catatan Comer, istilah untuk B Tree tidak dapat dijelaskan secara pasti. B bisa mengacu pada maksud balanced (seimbang) atau broad (luas), ataupun bushy (belukar). Salah satu sumbernya adalah Bayer dan McCreight, yang bekerja di Boeing. Menurutnya, B tidakmengacu pada binary.

Binary tree mempunyai faktor percabangan (cabang yang berasal dari satu node) tidak lebih dari dua, sedangkan B Tree tidak mempunyai batas percabangan (batas percabangannya dapat ditentukan sendiri). Faktor percabangan yang lebih tinggi merupakan konsekuensi untuk penyimpanan record yang lebih banyak pada setiap node. Karena perbedaan itulah, maka B Tree sering disebut multiway search tree.

Pada saat pembentukan, menurut struktur tree yang telah diketahui adalah tumbuh / berawal dari atas ke bawah (bersifat top down), dimana tree tumbuh dengan insertion sebuah node baru di bawah tree. Node akan berada tetap pada posisinya, tetapi node akhir / leaf berubah jika ada penambahan.

Dengan B Tree, record baru dimasukkan ke dalam leaf level, tetapi di root level atau atas dari tree berubah jika B Tree bertambah tinggi. Keuntungan dari bentuk pertumbuhan bottom up (bawah ke atas) adalah senantiasa strukturnya selalu seimbang tanpa perpindahan / perputaran seperti yang diperlukan AVL dan IPR Tree. Keseimbangan ini meletakkan upper bound (batas atas) untuk penggunaan pada kasus terburuk, untuk mengakses record tunggal. Faktor percabangan untuk B Tree selalu lebih banyak daripada AVL atau IPR Tree, namun depth - nya selalu lebih kecil untuk jumlah record yang sama. Depth yang lebih kecil ini maksudnya lebih sedikitnya pemeriksaan berulang, dimana ini dapat meningkatkan penggunannya, namun BTree juga masih memiliki banyak kelemahan.

Untuk itu, B Tree kemudian dikembangkan menjadi tree lainnya, yaitu B# Tree dan B+ Tree. Istilah ini diperkenalkan oleh Knuth, namun arti untuk istilah B Tree masih beraneka ragam.

2.2.6.1 Defenisi B Tree

Pada dasarnya B-Tree merupakan tree seimbang yang mirip dengan 2-3 Tree. Namun kelebihannya dibandingkan dengan 2-3 Tree adalah internal node pada B-Tree dapat digunakan untuk menyimpan data sekaligus sebagai search key atau search index (kunci pencarian).

Komposisi dari node B Tree mirip dengan sekeranjang atau seblok record yang di dalamnya terdiri dari berbagai input. Record record yang disimpan di dalam sebuah node tergantung pada kapasitas ordernya. Kapasitas order dan contrainst (desakan) lainnya pada B Tree dispesifikasikan dalam defenisi umumnya. Setiap node kecuali root, harus mempunyai pemakaian storage (tempat penyimpanan) paling sedikit 50 %. Pointer dalam node point menurunkan node (pada level selanjutnya yang lebih rendah) dari B Tree, jika leaf node tidak mempunyai keturunan (generasi penerus), dimana pointernya adalah null (diwakili ). Jumlah pointer dalam nonleaf node (node yang bukan daun) adalah lebih banyak satu buah dari density (jumlah record yang disimpan di dalam sebuah node), serta semua leaf node berada pada level yang sama.

Dari defenisinya, maka B Tree dari kapasitas order satu mempunyai node dengan satu dan dua key atau tiga pointer, seperti yang terlihat pada gambar di bawah ini :

Gambar 2.47 Ilustrasi key field dari node pada B - Tree

Walaupun key field hanya diilustrasikan dalam bagian record dari sebuah node, akan tetapi perlu diingat bahwa semua record tersimpan di sana. Ketika node penuh, maka terjadi pembelahan menjadi node. Dan middle (tengah) record sebagai record set, disusun dengan pengeluaran satu node tersebut dan dinaikkan menjadi level selanjutnya yang lebih tinggi (sebagai root dari subtree tersebut). Middle record tersebut dipilih menjadi pondasi pada key order.

Dengan defenisi dari kapasitas order dari suatu node, akan lebih mudah untuk menentukan middle record, jika terjadi overflow (jumlah data input melebihi kapasitas record yang tersedia atau melebihi jumlah record maksimum) pada saat penambahan satu atau lebih record ke dalam satu node. Kesulitan akan timbul pada saat penentuan middle record, pada saat jumlah record genap.

2.2.6.2 B Tree Insertion

Prosedur insertion pada B Tree akan diuraikan secara terperinci melalui dua contoh berikut. Pertama, B Tree akan diuraikan dengan menggunakan key order alpahabetik. Kemudian contoh kedua dengan key order numerik. Dimana kapasitas order akan menghasilkan pembelahan yang berulang yang akan membantu menjelaskan mekanisme dari insertion ke dalam B Tree. Nilai yang dipilih untuk kapasitas order tergantung pada parameter seperti : computer block atau page size dan record size untuk file.

Untuk contoh pertama, dimulai dengan insert nama hewan berhuruf tiga, untuk contoh yang lebih sederhana dan penulisan yang singkat. Insert yang akan dilakukan didasarkan pada algoritma berikut :

B Tree Insertion1. Aturlah B Tree sebagai index untuk peletakkan leaf node yang tepat untuk insert record baru.

If < , maka ke cabang kiri ;

If = , maka record ditolak ;

If > ,

If menemui record di sebelah kanan , maka ulangi perbandingan seperti sebelumnya untuk < dan = terhadap record tersebut.

Else, maka ke cabang kanan.

2. If ruang masih memungkinkan, insert record baru menurut posisi lexicographic (menurut abjad / alphabetic) di dalam sebuah node,

Else while kondisi overflow maka :

a. If overflowing node (node yang kelebihan record) sebagai root node, bentuklah sebuah root node baru dalam posisi parent ke root node sekarang,

b. Belahlah overflowing node ke dalam dua node.

c. Pilihlah middle record menurut lexicographic diantara semua record yang insert dan akan menjadi overflowing node. Naikkan middle record ke parent node nya dan letakkan berdasarkan posisi lexicographic yang benar.

d. Letakkan record secara lexicographic sebelum middle record ke dalam salah satu node dan record sisa ke dalam node lainnya.

e. Set posisi pointer dalam parent node dimana middle record dinaikkan. Set pointer pada kiri record yang dinaikkan ke node dengan lexicographic setengah lebih rendah dari record yang dibagi tersebut. Set pointer pada kanan record yang dinaikkan ke node dengan lexicographic diatas dari record yang dibagi tersebut.

Misalkan, data insert sebagai berikut : cat, ant, dog, cow, rat, pig, dan gnu.1.Jika insert cat, maka :

Gambar 2.48 Leaf Node B - Tree dengan insert cat

2.Jika kita tambahkan ant, tidak diperlukan pembelahan karena masih memiliki cukup ruang.

Gambar 2.49 Leaf Node B - Tree dengan insert ant

3.Kemudian kita tambahkan dog. Karena kodisi overflow. Cat sebagai middle record, diangkat ke level berikutnya yang lebih tinggi. Satu node di leaf level dibagi menjadi dua node dan bentuk sebuah root node dengan cat. Pembelahan menyebabkan height dari B Tree bertambah satu, tetapi perhatikan bahwa pertumbuhan terjadi pada top dari tree. Sehingga B Tree menjadi :

Gambar 2.50 B - Tree dengan insert dog

4.Record dengan cow sebagai key ditambahkan selanjutnya. Untuk menemukan node yang tepat untuk penempatan, aturlah B Tree dengan prosedur yang sama seperti yang digunakan pada insert dalam BST. Key dari record yang diinsert dibandingkan dengan key dari leftmost record dalam root node. Jika perbandingannya less than (lebih kecil dari), maka left subtree (cabang kiri), jika sama, maka didapat duplicate record atau penemuan terhadap suatu record diperlukan suatu perulangan. Jika lebih besar, bandingkan dengan key dari record selanjutnya dari node. Ulangi proses perbandingan. Ikuti pointer ke kiri dari record jika perbandingan less than sukses dilakukan. Jika perbandingan terhadap last (rightmost) key pada node adalah lebih besar , maka hubungkan rightmost subtree dengan node tersebut. Dengan mengikuti proses ini, untuk cow dimasukkan ke dalam node yang berisi dog. Key untuk next record adalah rat. Sehingga yang menjadi leaf node adalah cow dan dog. Karena node telah penuh, maka diperlukan pembelahan dengan dog sebagai middle recordnya yang dipromosikan ke root level. Leaf node awal dibelah menjadi dua node. Jika masih ada ruang di root node untuk dog, maka tidak diperlukan pembelahan lagi. Sehingga B-Tree tampak seperti berikut :

Gambar 2.51 B - Tree dengan insert rat

Perincian penting : Semua record yang dimasukkan ke dalam leaf node, hanya yang dinaikkan dari level yang lebih rendah adalah record yang dimasukkan ke dalam nonleaf node.

5.Selanjutnya pig ditambahkan. Karena secara lexicographic pig lebih besar dari cat, maka bandingkan lagi dengan dog. Akan tetapi masih lebih besar, namun dog merupakan last record pada node, maka jelajahi right subtree yang menghubungkan dengan node yang berisi rat. Karena masih ada ruang, maka proses insertion selesai. B Tree menjadi :

Gambar 2.52 B - Tree dengan insert pig

6. Record terakhir yang akan dimasukkan adalah gnu sebagai key. Record ini memperlihatkan pig dan rat sebagai leaf node. Karena node telah penuh, maka diperlukan pembelahan. Pig dinaikkan ke root level, dan satu leaf node ini dibelah menjadi dua node. Jika root node juga penuh, maka tidak ada ruang untuk menaikkam record. Root node juga harus dibelah menjadi dua, dibentuk sebuah root node dan level baru.

Gambar 2.53 B - Tree dengan insert gnu

Pemeriksaan ulang untuk B Tree didefenisikan untuk menjadi sebuah pengaksesan dari sebuah node dan bukan sebuah record.Karena B Tree merupakan struktur data yang cukup penting, maka berikut akan dijabarkan beberapa contoh dengan menggunakan data numerik untuk menguatkan pemahaman mengenai mekanisme dasar dari B Tree.1.Insert 80

Gambar 2.54 Leaf Node B - Tree dengan insert 80

2.Insert 50

Gambar 2.55 Leaf Node B - Tree dengan insert 50

3.Insert 100

Gambar 2.56 Leaf Node B - Tree dengan insert 100

4.Insert 90

Gambar 2.57 Leaf Node B - Tree dengan insert 90

5.Insert 60

Gambar 2.58 B - Tree dengan insert 60

6.Insert 65

Gambar 2.59 B - Tree dengan insert 65

7.Insert 70

Gambar 2.60 B - Tree dengan insert 70

8.Insert 75

Gambar 2.61 B - Tree dengan insert 75

9.Insert 55 dan 64

Gambar 2.62 B - Tree dengan insert 55 dan 64

10.Insert 51

Gambar 2.63 B - Tree dengan insert 51

11.Insert 76 dan 77

Gambar 2.64 B - Tree dengan insert 76 dan 77

12.Insert 78

Gambar 2.65 B - Tree dengan insert 78

13.Insert 200 dan 300

Gambar 2.66 B - Tree dengan insert 200 dan 300

14.Insert 150

Gambar 2.67 B - Tree dengan insert 150

Penggunaan perulangan pada kasus terburuk untuk B Tree adalah lebih sedikit dibanding pada AVL atau IPR Tree karena B Tree mempunyai faktor percabangan yang lebih tinggi.

Pemrosesan data berurut pada B Tree secara bertahap melalui node dari tree dalam sebuah inorder traversal. Jika mempunyai lebih dari dua jalur percabangan, dimana order adalah kiri, mempunyai node, pointer, , atau mengikuti alur sepanjang garis keliling dari B Tree, maka akan tampak seperti berikut :

Gambar 2.68 Bagan Alur Prioritas Proses Data pada B Tree

Dimulai dengan deepest node ke kiri, dalam kasus ini, A, node node diproses pada sebuah path ke arah dalam struktur diprioritaskan daripada sebuah path ke arah luar, atau di dalam diagram ini, ke arah path atas lebih diprioritaskan daripada path di bawah.

Bagan garis keliling sepanjang struktur akhir di atas merupakan alur yang ditempuh oleh proses insert record ke dalam node pada B Tree berdasarkan lexicographic pada dua contoh sebelumnya.

Penggunaan storage dari Tree adalah :

Jumlah record yang disimpan

Jumlah slot dari storage yang disediakan

Penggunaan storage untuk memasukkan seluruh data alphabetik di atas adalah 7/14 atau 50 persen, sedangkan untuk data numerik bahkan belum mencapai 50 persen. Penggunaan storage paling rendah adalah setelah pembelahan, terutama dalam kasus pembelahan yang melalui root. Pada saat penambahan record, penggunaan tempat bertambah hingga pembelahan selanjutnya. Satu keuntungan dari B# Tree pada seksi berikutnya mempunyai penggunaan tempat yang lebih besar.

2.2.6.3 B Tree Deletion (Penghapusan pada B Tree)

Deletion merupakan lawan dari insertion. Sebuah record dibuang dari sebuah node, dengan mempertahankan jumlah penggunaan tempat minimal dan struktur indeks untuk record perulangan. Jika record yang didelete (dihapus), bukan leaf node, maka diperlukan perpindahan record dari leaf node ke posisi record yang didelete, untuk mempertahankan sebuah key untuk membandingkan ketika pencarian pada indeks.

Untuk itu, indeks perlu dipertahankan. Record yang didelete dari sebuah leaf node ditempatkan dengan inorder successor ynag ditempatkan dengan mengikuti pointer setelah record didelete dan kemudian mengikuti leftmost pointer sepanjang node tidak null hingga tiba pada node tersebut. Sebagai contoh pada gambar di bawah, diperlihatkan bahwa 87 adalah inorder successor dari 84.

Gambar 2.69 Inorder Successor dari 84 pada B Tree

Jika tidak memenuhi ketentuan kapasitas minimum, sebuah record harus didelete dari leaf node atau dipindahkan dari sebuah leaf node untuk ditempatkan ke tempat lainnya, ketentuan kapasitas dilaksanakan dengan menyebarkan record ke dalam leaf node dan salah satu dari sibling node digabung dengan sibling node lainnya. Contoh penyebarannya :

Gambar 2.70 Leaf Node A Tidak Mencapai Ketentuan Kapasitas Minimum

Node A tidak mencapai ketentuan kapasitas minimum jika di dalam sebuah nonroot node kurang dari setengah yang terisi. Tetapi sibling node di kanannya, node B, terisi lebih dari batas minimum. Node A dapat meminjam dari node B untuk mencapai kapasitas kapasitas minimum. Record di dalam dua node bergabung dengan perbandingan record dalam parent node disebarkan seperti :

Gambar 2.71 Leaf Node yang Mencapai Ketentuan Kapasitas Minimum

Sekarang kedua node A dan B memenuhi ketentuan kapasitas minimum. Perhatikan bahwa perbandingan record dalam parent node telah berubah, ini diperlukan untuk mempertahankan B Tree tetap lexicographic. Jika penyebaran tidak memungkinkan, dimana, sibling node tidak mempunyai extra record (node yang jumlah recordnya melebihi kapasitas minimum), kemudian deficient node (node yang jumlah recordnya tidak memenuhi kapasitas minimum) digabung dengan sibling node. Dengan penggabungan, record di dalam dua node dikombinasikan ke dalam satu node, misalnya pada kondisi B Tree berikut :

Gambar 2.72 Leaf Node A Tidak Mencapai Ketentuan Kapasitas Minimum

Node A dalam keadaan deficient, namun node B, tidak mempunyai extra record. Record di dalam dua leaf node dan perbandingan record di dalam parent node dikombinasikan ke dalam satu node, sehingga strukturnya menjadi :

Gambar 2.73 Leaf Node A Mencapai Ketentuan Kapasitas Minimum

Perhatikan bahwa parent node sekarang berisi satu record lebih sedikit sejak offspring (keturunan) - nya berkurang. Jika pemindahan record dari parent node menyebabkan ketentuan kapasitas tidak terpenuhi, maka dilakukan penyebaran atau penggabungan dengan sibling nodenya. Penggabungan akan menyalurkannya ke root node. Jika root node berisi hanya sebuah record sebelum penggabungan, sehingga setelah proses penggabungan, record tersebut tidak diperlukan dan level dari tree akan berkurang satu.

Untuk pemahaman lebih lanjut, perhatikan contoh berikut :

Gambar 2.74 Contoh B Tree N dengan 3 Level

1.Delete dari leaf node yang mencapai ketentuan batas minimum.

Menghapus 68 dari contoh tree yang melukiskan kondisi ini. Tiga record mempertahankann nodenya setelah deletion tersebut, maka storage masih memenuhi ketentuan. Tree menjadi :

Gambar 2.75 B Tree N dengan Delete 68

2.Delete dari nonleaf node dan menukar posisi record tersebut sebuah record dari sebuah leaf node yang memenuhi ketentuan kapasitas minimum.

Jika 51 didelete dari B Tree tersebut, karena merupakan nonleaf node, maka ditempati oleh inorder successor record dari 51. Pindahkan 53 dari leaf node yang masih memenuhi ketentuan kapasitas minimum, maka hasil dari tree menjadi :

Gambar 2.76 B Tree N dengan Delete 51

3.Delete dari sebuah leaf node yang menyebabkan ketentuan kapasitas minimum tidak tercapai yang dapat dikoreksi dengan menyebarkan record tersebut ke sibling node-nya.

Jika record dengan key 63 didelete, ketentuan kapasitas minimum tidak terpenuhi pada node tersebut. Maka periksalah dengan penyebaran. Pada kumpulan tersebut, mula mula lihatlah ke sibling node sebelah kanan, jika tidak mempunyai extra record, maka lihatlah ke sibling node sebelah kiri. Pada contoh ini, sibling node kanan tidak mempunyai extra record, maka penyebarannya menjadi :

Gambar 2.77 B Tree N dengan delete 63

4.Delete dari sebuah leaf node yang menyebabkan ketentuan kapasitas minimum tidak tercapai yang meminta penggabungan node.

Jika delete record dengan key 53 dari B Tree di atas, karena merupakan nonleaf node, maka diperlukan penempatan dengan inorder succcessornya, 54. Tetapi memindahkan 54 dari leaf nodenya menyebabkan storage tidak memenuhi ketentuan kapasitas minimum. Penyebaran tidak memungkinkan karena sibling node kanan tidak mempunyai extra record dan tidak mempunyai sibling node kiri. Record di dalam leaf node dari dimana 54 dipindahkan bersama dengan record dari sibling node kanan dan perbandingan record dalam parent node digabungkan menjadi :

Gambar 2.78 B Tree N dengan delete 53 dengan Node C Tidak Memenuhi Ketentuan

Perhatikan bahwa node C tidak memenuhi ketentuan kapasitas minimum. Usahakan penyebaran atau penggabungan hingga kembali memenuhi ketentuan. Node C tidak mempunyai sibling node kanan dan sibling node kiri-nya tidak mempunyai extra record. Gabungkan node C dengan sibling node kiri-nya. Dalam pelaksanaan pemindahan record tunggal dari root node yang sekarang, dimana yang dapat dipindahkan dan level dari B Tree menjadi berkurang satu. Sehingga bentuk dari B Tree sekarang menjadi :

Gambar 2.79 B Tree N dengan delete 53 dengan Node C yang Memenuhi Ketentuan

Seperti insert record pada B Tree, ukuran dan depthnya bertambah, sehingga pada delete record dari B Tree ukuran dan depthnya akan berkurang. Semua terjadi secara otomatis seperti pada prosedur insertion dan deletion. Ini biasanya diperlukan pada penghapusan file untuk mengatur ulang struktur file.

2.2.6.4 B Tree Searching

Prosedur searching pada B Tree hampir sama dengan prosedur searching pada tree yang lain.

Algoritma pencarian X pada B Tree :

B - Tree Searching

1. If X < key of first record, cari ke leftmost node.

Ulangi hingga akhir percabangan, atau hingga data ditemukan atau tidak ditemukan.

2. If else X = key of first record, data ditemukan.3. If else X > key of first record, bandingkan X dengan record selanjutnya.

a. Jika record selanjutnya adalah null, maka langsung cari pada rightmost node. Cari pada node dengan langkah 1, 2, dan 3, hingga akhir percabangan atau hingga data ditemukan atau tidak ditemukan.

b. Jika tidak maka bandingkan,

i. Jika < , maka carilah node pada cabang diantara record sebelumnya dan sekarang.

ii. Jika = , maka data ditemukan.

iii. Jika > , maka ulangi langkah a dan b hingga akhir percabangan atau hingga data ditemukan atau tidak ditemukan.

Gambar 2.80 B Tree N dengan 2 Level

Contoh 1 :

Pencarian untuk X = 11

1. If X < 11, karena bukan maka lanjut ke langkah 2.

2. If X = 11, maka data ditemukan.

Contoh 2 :

Pencarian untuk X = 66

1. Karena X tidak < 11, X tidak < 30, dan X juga tidak < 54, maka bandingkan dengan record terakhir dari root node.

2. Karena X < 78, maka ambil cabang antara 54 dan 78. Kemudian bandingkan dengan 66. X = 66, maka dat ditemukan.

Contoh 3 :

Pencarian untuk X = 50

1. Karena X tidak < 11 dan X juga tidak < 30, maka bandingkan dengan record 54.

2. Karena X < 54, maka ambil cabang antara 30 dan 54.

3. Karena tidak ada percabangan selanjutnya, ulangi perbandingan dari record pertama pada node hingga record terakhir atau hingga data ditemukan atau tidak ditemukan.

4. Karena X salah satu record pada node tersebut, maka data tidak ditemukan.

N

N1

N2

N3

Nk

N

N1

N2

N3

Nk

A

B

D

E

C

F

H

I

O

N

M

L

K

J

G

2

3

5

4

I

C

B

O

D

K

J

G

L

A

H

N

M

F

E

A

B

D

I

E

J

K

C

F

G

L

M

N

O

H

A

H

O

N

M

L

G

F

C

K

J

E

I

D

B

A

B

D

F

C

G

H

I

J

L

K

2

3

4

5

A

B

D

E

I

H

M

L

K

J

C

F

G

M

L

S

R

O

N

Level

1

B

D

H

L

C

G

S

O

N

i = 1

G

F

C

I

H

E

D

BA

A

H

A

C

K

J

L

D

B

Preorder

Cetak Node H

Cetak Node A

Right subtree

Left subtree

(kosong)

D

Cetak Node C

Left subtree

Right subtree

Cetak Node D

Left subtree

(kosong)

Right subtree

(kosong)

A

C

D

B

C

D

B

B

Cetak Node B

Left subtree

(kosong)

Right subtree

(kosong)

Right subtree

Cetak Node K

Left subtree

Cetak Node E

Cetak Node F

Left subtree

(kosong)

Right subtree

(kosong)

Right subtree

L

Left subtree

(kosong)

Right subtree

(kosong)

K

J

L

J

K

L

J

Cetak Node H

Right subtree

Cetak Node A

Right subtree

D

Cetak Node C

Left subtree

(kosong)

Right subtree

Cetak Node K

Left subtree

Left subtree

(kosong)

Cetak Node J

Right subtree

(kosong)

Right subtree

B

L

Cetak Node L

Right subtree

(kosong)

Left subtree

(kosong)

Cetak Node B

Left subtree

(kosong)

Right subtree

(kosong)

A

C

D

B

C

D

B

J

Left subtree

Left subtree

Cetak Node D

Left subtree

(kosong)

Right subtree

(kosong)

Inorder

Cetak Node B

Left subtree

(kosong)

Right subtree

(kosong)

Cetak Node D

Left subtree

(kosong)

Right subtree

(kosong)

K

L

J

Cetak Node H

Right subtree

Cetak Node A

Right subtree

D

Cetak Node C

Right subtree

Left subtree

Left subtree

(kosong)

B

A

C

D

B

C

D

B

Left subtree

(kosong)

Cetak Node K

Cetak Node J

Right subtree

(kosong)

Right subtree

L

Cetak Node L

Right subtree

(kosong)

Left subtree

(kosong)

J

Left subtree

Left subtree

Postorder

X

T1

T2

13

9

18

15

10

21

23

9

10

15

13

18

23

21

0

0

0

1

0

0

0

0

0

0

0

0

0

7

8

6

3

1

2

7

8

6

5

5

2

1

0

0

0

1

0

7

8

6

5

2

1

0

5

2

1

0

0

0

0

0

0

1

2

7

8

6

0

1

60

0

0

0

1

40

50

20

50

10

0

-1

80

90

Pivot Point

2

60

0

-1

80

90

2

0

0

0

1

1

40

50

20

50

10

5

2

0

0

0

0

-1

-1

0

7

2

7

8

5

5

2

r

-2

h

T1

x

-1

h+1

T3

h

T2

x

h+1

T3

0

r

0

h

T2

h

T1

r

h

h

h+1

x

+1

T3

T1

T2

+2

x

r

0

h

T3

h

T2

h+1

T1

0

r

h

x

-1

T4

h

T1

+2

w

0

h

T3

h

T2

w

r

0

h

T4

h

T3

0

x

0

h

T2

h

T1

r

h

T4

+2

w

+1

h

T3

x

0

h

T2

h

T1

r

-2

h

T1

x

+1

h

T4

w

0

h

T3

h

T2

w

0

x

0

h

T4

h

T3

r

0

h

T2

h

T1

w

-2

w

-1

h

T2

h

T1

x

0

h

T4

h

T3

B

A

E

C

F

D

a

b

c

X

Y

MR

c

a

b

X

Y

Single left rotation

nc > na

c

Y

b2

b1

X

a

B

Double rotation

nb > na

a

c

X

Y

MR

b1

b2

B

a

b1

X

B

MR

b2

c

Y

Y

c

a

X

b

b

ML

Y

c

a

Y

Single

rotation

nc > na

a

X

b2

b1

Y

c

B

Double rotation

nb > na

Y

a

X

ML

c

b1

b2

B

a

X

ML

b2

c

b1

Y

B

b

b1

b2

Jefferson

Hampton

Greenville

Jefferson

Hampton

Greenville

Jefferson

Hampton

Greenville

Ahoskie

Jefferson

Hampton

Greenville

Ahoskie

Gurnsey

Jefferson

Hampton

Greenville

Ahoskie

Gurnsey

Boone

Hampton

Greenville

Ahoskie

Boone

Gurnsey

Jefferson

Hamilton

Hampton

Greenville

Ahoskie

Boone

Gurnsey

Jefferson

Gusey

Hampton

Greenville

Ahoskie

Boone

Gusey

Jefferson

Hamilton

Gurnsey

Hampton

Gusey

Greenville

Gurnsey

Ahoskie

Jefferson

Boone

Hamilton

2

5

11

7

3

13

2

3

5

7

11

13

7

3

5

11

13

2

5

3

7

13

11

5

11

3

2

3

7

5

7

10

13

10

11

13

Pointer Key (record) Pointer Key (record) Pointer

cat

ant

cat

cat

ant

dog

cat

dog

ant

cow

rat

cat

dog

ant

cow

pig

rat

dog

cat

ant

cow

pig

gnu

rat

80

50

80

50

80

100

50

80

90

100

80

50

60

90

100

80

50

60

65

90

100

80

50

60

65

70

90

100

50

60

70

75

90

100

65

80

50

60

60

64

70

75

90

100

65

80

50

51

70

75

90

100

55

65

80

60

640

50

51

70

75

76

77

90

100

55

65

80

60

640

50

51

77

78

90

100

55

65

76

80

60

640

70

75

50

51

77

78

90

100

200

300

55

65

76

80

60

640

70

75

50

51

55

65

76

80

55

65

80

150

77

78

70

75

60

64

90

100

200

300

G

N

C

A

D

S

T

Z

I

K

H

J

L

87

91

92

120

160

176

200

350

460

73

84

Inorder successor of 84

Tanda mewakili pointer bercabang ke node

85

200

350

53

90

100

105

B

A

90

200

350

53

85

100

105

A

B

85

200

350

53

90

100

A

B

200

350

53

85

90

100

A

2

7

51

11

30

66

78

53

54

63

33

41

12

15

22

68

69

71

76

79

84

93

2

7

51

11

30

66

78

53

54

63

33

41

12

15

22

69

71

76

79

84

93

2

7

53

11

30

66

78

54

63

33

41

12

15

22

69

71

76

79

84

93

2

7

53

11

30

69

78

54

66

33

41

12

15

22

71

76

79

84

93

2

7

54

11

30

78

66

69

71

76

33

41

12

15

22

79

84

93

C

2

7

66

69

71

76

79

84

93

11

30

54

78

12

150

22

33

41

2

7

66

69

71

76

79

84

93

11

30

54

78

12

150

22

33

41

_1174919919.unknown

_1174919921.xlsSheet1

123456789101112131415

ABCDEFGHI

_1174919918.psd