• Tidak ada hasil yang ditemukan

Binary Search Tree

N/A
N/A
Protected

Academic year: 2023

Membagikan "Binary Search Tree"

Copied!
33
0
0

Teks penuh

(1)

Struktur Data dan Algoritma

Suryana Setiawan, Ruli Manurung & Ade Azurat

(acknowledgments: Denny)‏

Fasilkom UI

Binary Search Tree

(2)

Tujuan

 Memahami sifat dari Binary Search Tree (BST)‏

 Memahami operasi-operasi pada BST

 Memahami kelebihan dan kekurangan dari

BST

(3)

Outline

 Properties of Binary Search Tree (BST)‏

 Operation

 Insert

 find

 remove

(4)

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 >X

(5)

Binary Search Tree

9 3

6

5 1

2

7

(6)

7 2

3

9

1 5

6

Binary Search Tree

(7)

3 2

1

3 1

2

2

1 3

1

3 2 1

2

3

Binary Search Tree

(8)

Basic Operations

 insert

 findMin and findMax

 remove

 cetak terurut

(9)

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( );

}

}

(10)

Insertion

 Penyisipan sebuah elemen baru dalam binary search tree, elemen tersebut pasti akan

menjadi leaf

10 2

3

15

1 5

6

12

14

(11)

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.

(12)

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;

}

Insertion

(13)

BinaryNode findMin (BinaryNode t) {

if (t == null) throw exception;

while (t.left != null) { t = t.left;

}

return t;

}

FindMin

 Mencari node yang memiliki nilai terkecil.

 Algorithm:

 ke kiri terus sampai buntu….:)‏

 Code:

(14)

FindMax

 Mencari node yang memiliki nilai terbesar

 Algorithm?

 Code?

(15)

Find

 Diberikan sebuah nilai yang harus dicari

dalam sebuah BST. Jika ada elemen tersebut, return node tersebut. Jika tidak ada, return null.

 Algorithm?

 Code?

7 2

3

9

1 5

6

(16)

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) sebagian anaknya. (mem-by- pass node yang dihapus).

Kasus 3: jika node punya dua anak…..

(17)

8 4

5

12

1 6

3

Remove

5

6 4

Kasus 1

Kasus 2

Kasus 3

(18)

Removing 6

8 4

5

12

1 6

3

(19)

After 6 removed

8

5

12

1

3

4

6

(20)

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.]

(21)

7

3

9

1 5

4

Removing 2 (Sucessor Inorder)

Cari node berisi 2

2

2

(22)

7

9

1 5

4

Removing 2 (Sucessor Inorder)

2

Cari sucessor Indorder

3

3

(23)

7

9

1 5

4

Removing 2 (Sucessor Inorder)

3

Gantikan posisi yang

dihapus

(24)

After 2 deleted

7

3 9

1 5

4

Hapus node

ini

(25)

Removing Root

7 2

3

12

1 5

4

10 14

9 11

9

(26)

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;

}

(27)

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;

}

(28)

removeMax

 code?

(29)

S L

S R X

k < S L + 1

S L

S R X

k == S L + 1

S L

S R X

k > S L + 1

Find k-th element

(30)

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);

}

}

(31)

Analysis

 Running time:

 insert?

 Find min?

 remove?

 Find?

 Worst case: O(n)‏

(32)

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.

(33)

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 yad akan dibahas struktur

binary tree dengan kemampuan auto-

balancing  AVL tree

Referensi

Dokumen terkait

Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah.. Sesuai dengan definisi tersebut tiap

Search adalah tree yang terurut dimana aturannya Semua data dibagian kiri sub- tree dari node t selalu lebih kecil dari data dalam node t itu sendiri dan semua data

Ciri khas yang melekat pada binary search tree ini yang bisa juga dibilang sebagai keunggulan dari BST adalah peletakan isi dari nodenya yang terurut berdasarkan

• Binary tree yang menyimpan pasangan prioritas (atau prioritas elemen) pada node • Property Heap :..

Sebuah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal 2 subtree yang disebut sebagai subpohon kiri(left subtree) dan subpohon kanan (right

Traversal preorder depth first order Dilaksanakan dengan jalan mencetak isi node yang dikunjungi lalu melakukan kunjungan ke subtree kiri dan selanjutnya ke subtree kanan.. Algoritma

Mengubah Notasi Postfix menjadi Binary Tree • Siapkan stack S, data yang dimasukkan pada stack S adalah objek TNode • Jika karakter adalah operand – membuat node baru dengan nilai

Node yang tidak memiliki anak disebut dengan "leaf node" atau "daun".. Binary Tree adalah tree dimana setiap node mempunyai paling banyak 2