Red Black Tree

Sanzida161 1,784 views 33 slides Sep 01, 2016
Slide 1
Slide 1 of 33
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33

About This Presentation

A a self balancing binary search tree with color nodes.


Slide Content

Red-Black Tree

Introduction A balancing binary search tree. A data structure requires an extra one bit color field in each node which is red or black. Leonidas J. Guibas  and Robert Sedgewick  derived the red-black tree from the symmetric binary B-tree.

Example of Red Black Tree

Properties of Red Black Tree The root and leaves (NIL’s) are black. A RED parent never has a RED child. in other words: there are never two successive RED nodes in a path Every path from the root to an empty subtree contains the same number of BLACK nodes called the black height We can use black height to measure the balance of a red-black tree.

Red black tree Operations Average Space O(n) Search O( log 2  n) Traversal *O(n) Insertion O( log 2  n) Deletion O( log 2  n)

Red Black Trees: Rotation B asic operation for changing tree structure is called rotation :

RB Trees: Rotation x y y x A lot of pointer manipulation x keeps its left child y keeps its right child x ’s right child becomes y ’s left child x ’s and y ’s parents change A B C A B C

Rotation Algorithm LEFT-ROTATE(T, x) y ← x->right x->right← y->left y->left->p ← x y->p ← x->p if x->p = Null then T->root ← y else if x = x->p->left then x->p->left ← y else x->p->right ← y y->left ← x x->p ← y RIGHT-ROTATE(T, x) y ← x->left x->left← y->right y->right->p ← x y->p ← x->p if x->p = Null then T->root ← y else if x = x->p->right then x->p->right ← y else x->p->left ← y y->right ← x x->p ← y Runtime : O(1) for Both.

Rotation Example Rotate left about 9: 12 5 9 7 8 11

Rotation Example Rotate left about 9: 5 12 7 9 11 8

Red-Black Trees: Insertion Insertion: the basic idea Insert x into tree, color x red Only r-b property 3 might be violated (if p[ x ] red) If so, move violation up tree until a place is found where it can be fixed Total time will be O(log n )

Insertion Algorithm TreeNode <T> rbInsert ( TreeNode <T> root,TreeNode <T> x ) // returns a new root { root= bstInsert ( root,x ); // a modification of BST insertItem x.setColor (red); while (x != root and x.getParent (). getColor () == red) { if ( x.getParent () == x.getParent (). getParent (). getLeft ()) { //parent is left child y = x.getParent (). getParent (). getRight () //uncle of x if ( y.getColor () == red) { // uncle is red x.getParent (). setColor (black); y.setColor (black); x.getParent (). getParent (). setColor (red); x = x.getParent (). getParent (); } else { // uncle is black if (x == x.getParent (). getRight ()) { x = x.getParent (); root = left_rotate ( root,x ); } x.getParent (). setColor (black); x.getParent (). getParent (). setColor (red); root = right_rotate ( root,x.getParent (). getParent ()); }} } else // ... symmetric to if } // end while root.setColor (black); return root; }

RB Insert: Case 1 B   x Case 1: “uncle” is red In figures below, all ’s are equal-black-height subtrees C A D    C A D   y new x Same action whether x is a left or a right child B   x  case 1

RB Insert: Case 2 B   x Case 2: “Uncle” is black Node x is a right child Transform to case 3 via a left-rotation C A  C B y A   x  case 2  y  Transform case 2 into case 3 (x is left child) with a left rotation This preserves property 4: all downward paths contain same number of black nodes

RB Insert: Case 3 Case 3: “Uncle” is black Node x is a left child Change colors; rotate right B A x  case 3 C B A   x  y  C    Perform some color changes and do a right rotation Again, preserves property 4: all downward paths contain same number of black nodes

RB Insert: Cases 4-6 Cases 1-3 hold if x ’s parent is a left child If x ’s parent is a right child, cases 4-6 are symmetric (swap left for right)

Insertion Example Insert 65 47 71 32 93

Insertion Example Insert 65 47 71 32 65 93

Insertion Example Insert 65 47 71 32 65 93 Insert 82

Insertion Example 82 Insert 65 47 71 32 65 93 Insert 82

Insertion Example 82 Insert 65 47 71 32 65 93 Insert 82 65 71 93 change nodes’ colors

Insertion Example 93 65 71 82 Insert 65 47 32 Insert 82 Insert 87 87

Insertion Example 93 65 71 82 Insert 65 47 32 Insert 82 Insert 87 87

Insertion Example 93 65 71 87 Insert 65 47 32 Insert 82 Insert 87 82

Insertion Example 93 65 87 Insert 65 47 32 Insert 82 Insert 87 82 71 87 93 change nodes’ colors

Insertion Example 87 93 65 Insert 65 47 32 Insert 82 Insert 87 82 71

RB Tree Deletion Algorithm TreeNode <T> rbDelete ( TreeNode <T> root,TreeNode <T> z) //return new root, z contains item to be deleted { TreeNode <T> x,y ; // find node y, which is going to be removed if ( z.getLeft () == null || z.getRight () == null ) y = z; else { y = successor(z); // or predecessor z.setItem ( y.getItem ); // move data from y to z } // find child x of y if ( y.getRight () != null ) x = y.getRight (); else x = y.getLeft (); // Note x might be null; create a pretend node if (x == null ) { x = new TreeNode <T>( null ); x.setColor (black); }

Red-black tree retrieval: Retrieving a node from a red-black tree doesn’t require more than the use of the BST procedure, which takes O(log n) time.

RB Trees efficiency All operations work in time O(height) and we have proved that heigh is O(log n) hence, all operations work in time O(log n)! – much more efficient than linked list or arrays implementation of sorted list!

Red Black Tree Application Completely Fair Scheduler  in Linux Kernel. Computational Geometry Data structures. Red-black trees make less structural changes to balance themselves  . To keep track of the virtual memory segments for a process - the start address of the range serves as the key. Red–black trees are also particularly valuable in functional programming To keep track of the virtual memory segments for a process - the start address of the range serves as the key.

Comparison Between Avl and RB Tree For small data: insert: RB tree & avl tree has constant number of max rotation but RB tree will be faster because on average RB tree use less rotation. lookup: AVL tree is faster, because AVL tree has less depth. delete: RB tree has constant number of max rotation but AVL tree can have O(log N) times of rotation as worst. and on average RB tree also has less number of rotation thus RB tree is faster.

Comparison Between Avl and RB Tree (continued) for large data: insert: AVL tree is faster. because you need to lookup for a particular node before insertion. as you have more data the time difference on looking up the particular node grows proportional to O(log N). but AVL tree & RB tree still only need constant number of rotation at the worst case. Thus the bottle neck will become the time you lookup for that particular node. lookup: AVL tree is faster. (same as in small data case) delete: AVL tree is faster on average, but in worst case RB tree is faster. because you also need to lookup for a very deep node to swap before removal (similar to the reason of insertion). on average both trees has constant number of rotation. but RB tree has a constant upper bound for rotation.

Thank You