Download as pdf or txt
Download as pdf or txt
You are on page 1of 33

IKI10400  Struktur Data & Algoritma:

Binary Search Tree

Fakultas Ilmu Komputer  Universitas Indonesia


Slide acknowledgments:
Suryana Setiawan, Ade Azurat, Denny, Ruli Manurung, Tisha Melia

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 1


Tujuan
 Memahami sifat dari Binary Search Tree (BST)‫‏‬
 Memahami operasi-operasi pada BST
 Memahami kelebihan dan kekurangan dari BST

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 2


Outline
 Properties of Binary Search Tree (BST)‫‏‬
 Operation
 insert
 find
 remove

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 3


Properties of Binary Search Tree
• Untuk setiap node X pada tree, nilai elemen pada
subtree sebelah kiri selalu lebih kecil dari elemen
node X dan nilai elemen pada subtree sebelah
kanan selalu lebih besar dari elemen node X.
• Jadi object elemen harus comparable.

<X >X

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 4


Binary Search Tree
7 2 1 5
6 3 9

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 5


Binary Search Tree

7
9
2

1 5

3 6

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 6


Binary Search Tree

3 3 1 1

2 1 2 3
3
1 2 2

1 3

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 7


Basic Operations
 insert
 findMin and findMax
 remove
 cetak terurut

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 8


Print InOrder
class BinaryNode {
void printInOrder( )‫‏‬
{
if( left != null )‫‏‬
left.printInOrder( ); // Left
System.out.println( element ); // Node
if( right != null )‫‏‬
right.printInOrder( ); // Right
}
}

class BinaryTree {
public void printInOrder( )‫‏‬
{
if( root != null )‫‏‬
root.printInOrder( );
}
}

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 9


Insertion
• Penyisipan sebuah elemen baru dalam binary
search tree, elemen tersebut pasti akan menjadi
leaf
10
15
2

1 5 12

3 6 14
Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 10
Insertion: algorithm
 Menambah elemen X pada binary search tree:
 mulai dari root.
 Jika X lebih kecil dari root, maka X harus diletakkan
pada sub-tree sebelah kiri.
 jika X lebih besar dari root, then X harus diletakkan
pada sub-tree sebelah kanan.
 Ingat bahwa: sebuah sub tree adalah juga sebuah
tree. Maka, proses penambahan elemen pada
sub tree adalah sama dengan penambahan pada
seluruh tree. (melalui root tadi)
 Apa hubungannya?
 permasalahan ini cocok diselesaikan secara rekursif.

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 11


Insertion

BinaryNode insert(int x, BinaryNode t)


{
if (t == null) {
t = new BinaryNode (x, null, null);
} else if (x < t.element) {
t.left = insert (x, t.left);
} else if (x > t.element) {
t.right = insert (x, t.right);
} else {
throw new DuplicateItem(“exception”);
}
return t;
}

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 12


FindMin
 Mencari node yang memiliki nilai terkecil.
 Algorithm:
 ke kiri terus sampai buntu….:)‫‏‬
 Code:
BinaryNode findMin (BinaryNode t)
{
if (t == null) throw exception;

while (t.left != null) {


t = t.left;
}
return t;
}

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 13


FindMax
 Mencari node yang memiliki nilai terbesar
 Algorithm?
 Code?

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 14


Find
 Diberikan sebuah nilai yang harus dicari dalam
sebuah BST. Jika ada elemen tersebut, return
node tersebut. Jika tidak ada, return null.
 Algorithm?
7
 Code?
9
2

1 5

3 6
Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 15
Remove
 Kasus 1: jika node adalah leaf (tidak punya anak),
langsung saja dihapus.
 Kasus 2: jika node punya satu anak: node parent
menjadikan anak dari node yang dihapus (cucu)
sebagai anaknya. (mem-by-pass node yang
dihapus).
 Kasus 3: jika node punya dua anak…..

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 16


Remove

8
12
4 Kasus 3

1 6 Kasus 2

3 5 Kasus 1

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 17


Removing 6

12
4

6
1

3 5

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 18


After 6 removed

12
4

6
1

3 5

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 19


Remove (lanj.)
 Bagaimana bila node punya dua anak?
1. Hapus isi node (tanpa mendelete node)
2. Gantikan posisinya dengan:
 Succesor Inorder node terkecil dari sub tree kanan,
dilanjutkan dengan melakukan removeMin di subtree
kanan.
[Alternatif: dengan kaidah Predecesor Inorder,
2. Gantikan posisinya dengan:
 Predecesor Inorder, node terbesar dari sub tree kiri,
dilanjutkan dengan melakukan removeMax di subtree kiri.]

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 20


Removing 2 (Sucessor Inorder)

Cari node
berisi 2
7

2 9

1 5

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 21


Removing 2 (Sucessor Inorder)

2 7
9

1 5 Cari sucessor
Indorder

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 22


Removing 2 (Sucessor Inorder)

Gantikan
posisi yang
dihapus
7
9

1 5

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 23


After 2 deleted

3 9

1 5
Hapus node
ini

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 24


Removing Root

7
9

2 12

1 5 10 14

3 9 11

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 25


removeMin

BinaryNode removeMin(BinaryNode t)
{
if (t == null) throw exception;

if (t.left != null) {
t.left = removeMin (t.left);
} else {
t = t.right;
}
return t;
}

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 26


Remove
BinaryNode remove(int x, BinaryNode t) {
if (t == null) throw exception;
if (x < t.element) {
t.left = remove(x, t.left);
} else if (x > t.element) {
t.right = remove(x, t.right);
} else if (t.left != null && t.right != null) {
t.element = findMin(t.right).element;
t.right = removeMin(t.right);
} else {
t = (t.left != null) ? t.left : t.right;
}
return t;
}

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 27


removeMax
 code?

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 28


Find k-th element

X X X

SR SR SR
SL SL SL

k < SL + 1 k == SL + 1 k > SL + 1

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 29


Find k-th element
BinaryNode findKth(int k, BinaryNode t)
{
if (t == null) throw exception;
int leftSize = (t.left != null) ?
t.left.size : 0;

if (k <= leftSize ) {
return findKth (k, t.left);
} else if (k == leftSize + 1) {
return t;
} else {
return findKth ( k - leftSize - 1, t.right);
}
}

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 30


Analysis
 Running time:
 insert?
 Find min?
 remove?
 Find?
 Worst case: O(n)‫‏‬

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 31


Rangkuman
 Binary Search Tree menjamin urutan elemen
pada tree.
 Tiap node harus comparable
 Semua operasi membutuhkan O(log n) - average
case, saat tree relatif balance.
 Semua operasi membutuhkan O(n) - worst case,
tinggi dari tree sama dengan jumlah node.

Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 32


Selanjutnya:
 Sejauh ini struktur Binary Search terbentuk
dengan asumsi data cukup acak sehingga seluruh
bagian tree akan cukup terisi.
 Benarkah asumsi tersebut?
 Jika tidak benar, maka akan terbentuk tree yang
“tidak balance” yang berakibat tidak tercapainya
performance O(log n)
 Solusi?
 Dalam kuliah yang akan datang dibahas struktur
binary tree dengan kemampuan auto-balancing
 AVL tree
Fasilkom UI  IKI10400 Struktur Data & Algoritma 2013/14  Gasal  Kuliah 1 33

You might also like