Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Red-Black Trees. DEFINISI Red-Black Trees adalah Binary Search Tree dengan menyimpan data tambahan yaitu warna (Merah atau Hitam). Syarat yang harus dipenuhi.

Presentasi serupa


Presentasi berjudul: "Red-Black Trees. DEFINISI Red-Black Trees adalah Binary Search Tree dengan menyimpan data tambahan yaitu warna (Merah atau Hitam). Syarat yang harus dipenuhi."— Transcript presentasi:

1 Red-Black Trees

2 DEFINISI Red-Black Trees adalah Binary Search Tree dengan menyimpan data tambahan yaitu warna (Merah atau Hitam). Syarat yang harus dipenuhi oleh sebuah Red-Black Trees antara lain: 1.Setiap Node harus mempunyai warna Merah atau hitam 2.Root berwarna hitam 3.Setiap nill node diberi warna hitam 4.Jika sebuah node merah maka kedua anaknya harus hitam 5.Tiap node, pada seluruh path dari node tersebut ke descendant leaves mengandung jumlah node hitam yang sama

3 PRESENTASI Red Black Trees dapat dipresentasikan dengan menggunakan link list typedef enum {red,black} color; typedef struct red_black *red_black_ptr typedef struct red_black { element data; red_black_ptr l_child; red_black_ptr r_child; color l_color; color r_color; }

4 PRESENTASI typedef enum {red,black} color; typedef struct red_black *red_black_ptr typedef struct red_black { element data; color node_color red_black_ptr l_child; red_black_ptr r_child; }

5 PRESENTASI

6 INSERT Proses insert pada Red-Black Trees sama seperti proses insert pada Binary Search Trees: 1.Cari posisi dari node baru dimulai dari root 2.Berikan warna merah kepada node tersebut. 3.Periksa apakah setelah dilakukan insert tree tersebut masih RB Trees. Jika tidak perbaiki menjadi RB Trees (sesuai dengan syarat pada slide awal)

7 Insert Case 1 Jika Uncle (Y) berwarna merah X->parent->color=black; Y->color=black; X->parent->parent->color=red; X=X->parent->parent;

8 Insert Case 2 Jika uncle(y) black node x adalah right child Parent left child X=X->parent; Leftrotate(x) Continue to Case 3

9 Insert Case 3 Jika uncle(y) black node x adalah left child dari parent yang merupakan left child X->parent->color=black; X->parent->parent->color=red X=X->parent->parent Rightrotate(x)

10 Insert Case 4 Jika uncle(y) black node x adalah left child dari Parent yang merupakan right child X=X->parent; Rightrotate(x) Continue to Case 5

11 Insert Case 5 Jika uncle(y) black node x adalah right child dari parent yang merupakan right child X->parent->color=black; X->parent->parent->color=red X=X->parent->parent Leftrotate(x)

12 INSERT Rotasi terdiri dari 2 macam Left Rotation (Rotasi kiri) Right Rotation (Rotasi kanan)

13 rb_insert( Tree T, node x ) { /* Insert in the tree in the usual way */ tree_insert( T, x ); /* Now restore the red-black property */ x->colour = red; while ( (x != T->root) && (x->parent->colour == red) ) { if ( x->parent == x->parent->parent->left ) { /* If x's parent is a left, y is x's right 'uncle' */ y = x->parent->parent->right; if ( y->colour == red ) { /* case 1 - change the colours */ x->parent->colour = black; y->colour = black; x->parent->parent->colour = red; /* Move x up the tree */ x = x->parent->parent; } else { /* y is a black node */ if ( x == x->parent->right ) { /* and x is to the right */ /* case 2 - move x up and rotate */ x = x->parent; left_rotate( T, x ); } /* case 3 */ x->parent->colour = black; x->parent->parent->colour = red; x=x->parent->parent right_rotate( T, x ); } Implementation

14 else { y = x->parent->parent->left; if ( y->colour == red ) { /* case 1 - change the colours */ x->parent->colour = black; y->colour = black; x->parent->parent->colour = red; /* Move x up the tree */ x = x->parent->parent; } else { /* y is a black node */ if ( x == x->parent->left ) { /* and x is to the right */ /* case 2 - move x up and rotate */ x = x->parent; right_rotate( T, x ); } /* case 3 */ x->parent->colour = black; x->parent->parent->colour = red; x=x->parent->parent left_rotate( T, x); } /* Colour the root black */ T->root->colour = black; } Implementation (2)

15 INSERT Insert(1) 1 Colour root is black 1 Insert(2) 2 No repair needed 1 Insert(3) Left rotation Insert(4) Parent is red- rebalance required Case 5:parent to right of grandparent Colour Root is black

16 Insert(5) 5 Left rotation Insert(6) 6 Parent is red- rebalance required Case 5:parent to right of grandparent Insert(7) Left rotation INSERT

17 Insert(8) 5 6 Left rotation Parent is red- rebalance required Case 5:parent to right of grandparent INSERT

18 Delete Proses delete pada RBT sama dengan proses delete pada BST Jika yang didelete adalah node dengan warna merah maka tree tersebut masih tetap RBT. Jika node yang didelete memiliki 1 anak berwarna merah maka ganti warna anak tersebut menjadi hitam. Jika proses delete tersebut tidak menghasilkan sebuah RBT maka perbaiki (Fixup). Hal ini terjadi karena proses delete dilakukan terhadap node yang berwarna hitam. Catatan: proses perpindahan hanya melakukan perpindahan data (key) tidak warna

19 Delete

20 Delete Fixup Case 1 Precondition: –X adalah left child dan black –Sibling dari x adalah red (parent black) To do: –Parent dari x ubah menjadi red –brother dari x ubah menjadi black –Left Rotate

21 Delete Fixup

22 Case 2 –Precondition: X adalah left child dan black Sibling dari x adalah black Kedua anak dari Brother x black –To do: Sibling dari x ubah menjadi red Pindahkan x ke parent dari x

23 Delete Fixup

24 Case 3 –Precondition: X adalah left child dan black Sibling dari x adalah black Right child dari brother x adalah black Left child dari brother x adalah red –To do: Sibling dari x ubah menjadi red Left child dari brother x ubah menjadi black Right rotate dari brother

25 Delete Fixup

26 Case 4 –Precondition: X adalah left child dan black Sibling dari x adalah black Right child dari brother x adalah red –To do: Ubah Sibling x menjadi warna dari parent x Ubah warna parent x menjadi black Right child dari Sibling x ubah menjadi black Left rotate dari parent x dan stop

27 Delete Fixup

28 delete(rbTree T, node n) node child, cut; if isNill(del.left) or isNill(del.right) then cut = n; else cut = successor(n); end if if not isNill(cut.left) then child = cut.left; else child cut.right; end if child.parent = cut.parent; if isNill(cut.parent) then T.root = child; else if cut.parent.left = cut then cut.parent.left = child; else cut.parent.right = child; end if if cut <> n then n.values = cut.values; end if if cut.color = BLACK then rbDeleteFixUp(T, child); end if return cut; end

29 Delete Fixup rbDeleteFixUp(rbTree T, node n) while n <> T.root and n.color = BLACK do //Fix either case, returns a node that if red we can color black. if n = n.parent.left then n = leftCase(T, n); else n = rightCase(T, n); end if end while n.color = BLACK; end

30 Delete Fixup node rightCase(rbTree T, node n) node sibling; sibling = n.parent.left; //CASE 1: rotate right to convert into case 2, 3 or 4 if sibling.color = RED then sibling.color = BLACK; n.parent.color = RED; rotateRight(T, n.parent); sibling = n.parent.left; end if //CASE 2: No rotation needed, simply recolor and move up the tree. if sibling.left.color = BLACK and sibling.right.color = BLACK then sibling.color = RED; n = n.parent; else //CASE: 3: rotate left to turn this into case 4 if sibling.left.color = BLACK then sibling.right.color = BLACK; sibling.color = RED; rotateLeft(T, sibling); sibling = n.parent.left; end if //CASE 4: We have to rotate right sibling.color = n.parent.color; n.parent.color = BLACK; sibling.left.color = BLACK; rightRotate(T, n.parent); n = T.root // to terminate the while loop end if return n; end


Download ppt "Red-Black Trees. DEFINISI Red-Black Trees adalah Binary Search Tree dengan menyimpan data tambahan yaitu warna (Merah atau Hitam). Syarat yang harus dipenuhi."

Presentasi serupa


Iklan oleh Google