Week 8
2-3 Tree
Data disimpan di dalam leaf tree dan disimpan secara berurutan, jika dilihat dari kiri
ke kanan. Internal nodes dari tree tersebut terlihat seperti index di dalam buku.
Internal node mungkin berisi key index untuk memandu pencarian ke dalam leaf yang
menyimpan data yang diinginkan.
Node v berisi 1 key index k1, yang berarti data dan key index dalam TL lebih kecil
daripada k1, sedangkan data dan key index dalam TR lebih besar atau sama dengan k1.
2.2. Insertion
Ketika ingin memasukkan key baru “k”, leaf baru yang menyimpan k akan
dimasukkan ke dalam tree. Hal pertama yang dilakukan adalah mencari key “k” dan
mengingat interior node terakhir yang ditemukan ketika proses searching terjadi (1
level di atas leaf). Interior node tersebut akan menjadi parent dari new leaf.
Inserting 18 yang menyebabkan proses searching:
Ketika parent mempunya 3 child, parent harus mempunya 2 key index k1 dan k2, di
mana k1 < k2. Nilai dari middle dan right child akan menjadi k1 dan k2.
Contoh:
Insert 28. Langkah pertama, cari sampai leaf:
Untuk menyelesaikan permasalahan dari parent dengan 3 child dan terlalu penuh
untuk menerima child lain:
• Bagi ke 4 child menjadi 2 child dengan nilai yang lebih kecil dan 2 child yang
dengan nilai lebih besar
• 2 child dengan nilai yang lebih kecil tetap bersama parent, yang akan menjadi satu
node dengan 2 child.
• Buat node baru untuk menjadi parent dari 2 child dengan nilai yang lebih besar
Apakah key index yang seharusnya berada dalam grandparent lama dan grandparent
baru? Karena grandparent lama adalah sebuah root, maka tidak ada parent yang
digunakan untuk menggabungkan keduanya. Bagaimana caranya untuk
menggabungkan grandparent baru ke dalam tree?
Ketika membagi sebuah interior node yang bukan merupakan parent dari leaf, node
tersebut akan memiliki 3 key index (node yang didapatkan dari pembagian sebuah
child) yang membagi 4 anak.
Ketika old parent adalah sebuah root, tidak ada grandparent yang dapat digunakan
untuk menggabungkan parent baru ke dalam tree. Oleh karena itu dibuatlah
grandparent baru yang akan menjadi root baru.
2.3. Deletion
Karena data hanya disimpan di dalam leaf, maka harus dilakukan pencarian sampai ke
node leaf untuk sebuah data yang ingin dihapus. Data yang dihapus harus berupa leaf.
Contoh:
Parent hanya akan memiliki 2 anak sehingga hanya boleh memiliki 1 key index. Key
index apa yang seharusnya ada dalam parent? Parent dari 2 leaf seharusnya berisi data
dari key index yang diambil dari child dengan nilai yang paling besar.
Ketika 1 dari 3 leaf child dihapus, nilai dari child dengan nilai terbesar akan menjadi
parent key index.
Parent dari leaf 68 yang ingin dihapus memiliki 3 anak, sehingga nodenya tetap valid.
Delete 56:
Key index dari parent, sibling dan parent mereka harus disesuaikan. Cara
menyesuaikan key indexnya adalah dengan cara mengecek apakah sibling berada di
kanan dan kg adalah key dalam grandparent yang membagi kedua sibling tersebut.
Setelah proses delete 56, proses adopt child paling dekat dari siblingnya dihasilkan
tree seperti berikut ini:
Ketika melakukan proses delete 68, maka parentnya hanya akan memiliki 1 anak,
dimana hal ini tidak diperbolehkan, sehingga harus dilakukan proses adopt ke child
yang paling dekat yang memiliki 3 anak.
Key index dari parent, sibling dan parent mereka harus disesuaikan. Cara
menyesuaikan key indexnya adalah dengan cara mengecek apakah sibling berada di
kiri dan kg adalah key dalam grandparent yang membagi kedua sibling tersebut.
Setelah proses delete 68, proses adopt child paling dekat dari siblingnya dihasilkan
tree seperti berikut ini:
Tidak ada sibling yang memiliki 3 child, jadi parent dengan 1 child tidak dapat
mengambil child yang tersisa, sehingga 1 child yang tersisa harus diambil oleh salah
satu parent siblingnya.
Setelah menghapus 56, 1 child tersisa dari parentnya (34) akan diambil oleh parent
sibling yang ada di sebelah kiri:
Ketika sibling kiri mengambil anak yang tersisa dari parentnya, key index harus
diperbaiki, dengan mengecek jika kg adalah key index dari grandparent yang
membagi sibling dan parentnya:
Perhatikan bahwa grandparentnya sekarang hanya memiliki 1 child (jika node tersebut
memiliki 2 anak sebelumnya). 1 child ini akan menjadi permasalahan yang akan
berulang sampai root.
Delete 25:
Setelah menghapus node 25, parent (30) hanya memiliki 1 anak tanpa sibling dengan
extra child, sehingga 1 child yang tersisa (30) akan diambil oleh parent siblingnya:
Sekarang root hanya memiliki 1 anak tersisa, sehingga dapat dilakukan proses untuk
menghapus root tersebut dan menjadikan child dari root tersebut sebagai root baru.
Root hanya memiliki 1 anak yang tersisa, sehingga kita menghapus rootnya
2-3 Tree adalah sebuah tree dalam data structure yang setiap nodenya memiliki 2 child
dengan masing-masing 1 data atau 3 child dengan masing-masing 2 data. 2-3 Tree bukan
merupakan Binary Tree.
Operation:
• Searching
• Insertion
• Deletion
1. Reema Thareja,. 2011. Data structures using C. OXFOR. New Delhi. ISBN:978-0-19-
806544-9