10 red black trees

Post on 24-Jul-2015

98 Views

Category:

Engineering

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Analysis of AlgorithmsRed-Black Trees

Andres Mendez-Vazquez

October 31, 2014

1 / 97

Outline

1 Red Black TreesDefinitionsLemma for the height of RBTRotations in RBTInsertion in RBTDeletion in RBTExercices

2 / 97

Outline

1 Red Black TreesDefinitionsLemma for the height of RBTRotations in RBTInsertion in RBTDeletion in RBTExercices

3 / 97

Red Black Trees: Definitions

DefinitionA Red Black Tree is a BST where each node has an extra field, its color.

Properties1 Every node is either red or black.2 The root is black.3 Every leaf (NIL) is black.4 If a node is red, then both its children are black.5 For each node, all paths from the node to descendant leaves contain

the same number of black nodes.

4 / 97

Red Black Trees: Definitions

DefinitionA Red Black Tree is a BST where each node has an extra field, its color.

Properties1 Every node is either red or black.2 The root is black.3 Every leaf (NIL) is black.4 If a node is red, then both its children are black.5 For each node, all paths from the node to descendant leaves contain

the same number of black nodes.

4 / 97

Red Black Trees: Definitions

Example

26

17 41

14 21

10 16

7 12

19

20

23

15

3

30 47

28 38

35 39

T.nil

5 / 97

Red Black Trees: Definitions

Black height bh(x)We call the number of black nodes on any path from, but not including, anode x down to a leaf the black height of the node.

6 / 97

Outline

1 Red Black TreesDefinitionsLemma for the height of RBTRotations in RBTInsertion in RBTDeletion in RBTExercices

7 / 97

Lemma for the height of RBT

TheoremA RBT with n internal nodes has height at most 2 log(n + 1).

Proof: Step 1Prove that any subtree rooted at x contains at least 2bh(x) − 1internal nodes.If bh(x) = 0, then x is a leaf, then 2bh(x) − 1 = 20 − 1 = 0.Now with bh(x) > 0, we have that child[x] has height bh(x) orbh(x)− 1.

8 / 97

Lemma for the height of RBT

TheoremA RBT with n internal nodes has height at most 2 log(n + 1).

Proof: Step 1Prove that any subtree rooted at x contains at least 2bh(x) − 1internal nodes.If bh(x) = 0, then x is a leaf, then 2bh(x) − 1 = 20 − 1 = 0.Now with bh(x) > 0, we have that child[x] has height bh(x) orbh(x)− 1.

8 / 97

Proof

Case IHeight of child is bh(x).Then, the child is red, if not subtree rooted at x will have heightbh(x) + 1!Now, we have two subtrees from the child with red root...

Thus, we haveThus, each of this subtrees has height bh(x)− 1 ⇒ each treecontains at least 2bh(x)−1 − 1 nodes by inductive hypothesis.Then the child contains at least 2bh(x)−1 − 1+ 2bh(x)−1 − 1 internalnodes.Finally, the tree rooted contains 2bh(x)−1 − 1+ 2bh(x)−1 − 1+ 1 (Onefor the node rooted at the child node)

9 / 97

Proof

Case IHeight of child is bh(x).Then, the child is red, if not subtree rooted at x will have heightbh(x) + 1!Now, we have two subtrees from the child with red root...

Thus, we haveThus, each of this subtrees has height bh(x)− 1 ⇒ each treecontains at least 2bh(x)−1 − 1 nodes by inductive hypothesis.Then the child contains at least 2bh(x)−1 − 1+ 2bh(x)−1 − 1 internalnodes.Finally, the tree rooted contains 2bh(x)−1 − 1+ 2bh(x)−1 − 1+ 1 (Onefor the node rooted at the child node)

9 / 97

Proof

FinallyThen, the tree with root x contains at least2× 2bh(x)−1 − 1 = 2bh(x) − 1

Case IIHeight of the child is bh(x)− 1.Thus the children are black.Now, we have two subtrees with at least 2bh(x)−1 − 1 nodes byinductive hypothesis.Thus, we have that the tree with root x contains at least2bh(x)−1 − 1+ 2bh(x)−1 − 1+ 1 internal nodes.

10 / 97

Proof

FinallyThen, the tree with root x contains at least2× 2bh(x)−1 − 1 = 2bh(x) − 1

Case IIHeight of the child is bh(x)− 1.Thus the children are black.Now, we have two subtrees with at least 2bh(x)−1 − 1 nodes byinductive hypothesis.Thus, we have that the tree with root x contains at least2bh(x)−1 − 1+ 2bh(x)−1 − 1+ 1 internal nodes.

10 / 97

Proof

AgainThen, the tree with root x contains at least2× 2bh(x)−1 − 1 = 2bh(x) − 1

FinallyNow given that h is the height of the tree, we have by property 4 thatbh(T ) ≥ h

2 .

Then n ≥ 2bh(root) − 1 ≥ 2 h2 − 1.

Then, h ≤ 2 log(n + 1) �.

11 / 97

Proof

AgainThen, the tree with root x contains at least2× 2bh(x)−1 − 1 = 2bh(x) − 1

FinallyNow given that h is the height of the tree, we have by property 4 thatbh(T ) ≥ h

2 .

Then n ≥ 2bh(root) − 1 ≥ 2 h2 − 1.

Then, h ≤ 2 log(n + 1) �.

11 / 97

Lemma for the height of RBT

CorollaryFrom the previous theorem we conclude that SEARCH, MINIMUM,etcetera, can be implemented in O(log n).

12 / 97

Outline

1 Red Black TreesDefinitionsLemma for the height of RBTRotations in RBTInsertion in RBTDeletion in RBTExercices

13 / 97

Rotations in RBT

PurposeRotations are used to mantain the structure of the RBT.

Types of rotationsThere are left and right rotations, they are inverse or each other.

14 / 97

Rotations in RBTPurposeRotations are used to mantain the structure of the RBT.

Types of rotationsThere are left and right rotations, they are inverse or each other.

y

xy

x

Left-Rotate(T,x)

Right-Rotate(T,y)

14 / 97

Example of Rotations in RBT

LEFT-ROTATE(T,x)1 y = x.right . Set y2 x.right = y.left . Turn y’s left subtree into x’s right subtree3 if y.left 6= T.nil4 y.left.p = x5 y.p = x.p . Link x’s parent to y6 if x.p == T.nil7 T.root = y8 elseif x == x.p.left9 x.p.left = y10 else x.p.right = y11 y.left = x . Put x on y’s left12 x.p = y

15 / 97

Example Left-Rotate

Step 1 - the correct right child is changed1 y = x.right . Set y2 x.right = y.left . Turn y’s left subtree into x’s right subtree

y

x

16 / 97

Example Left-Rotate

Step 2 - the parents are set correctly3. if y.left 6= T.nil4. y.left.p = x5. y.p = x.p

y

x

17 / 97

Example Left-RotateStep 36. if x.p == T.nil .Set y to be the root if x was it7. T.root = y8. elseif x == x.p.left9. x.p.left = y10. else x.p.right = y

y

x

18 / 97

Example Left-Rotate

Step 411. y.left = x . Put x on y’s left12. x.p = y

y

x

19 / 97

Outline

1 Red Black TreesDefinitionsLemma for the height of RBTRotations in RBTInsertion in RBTDeletion in RBTExercices

20 / 97

Insertion Code in RBTRB-INSERT(T , z)

1 y = T.nil

2 x = T.root3 while x 6=T.nil

4 y = x

5 if z.key<x.key

6 x = x.left7 else x = x.right

8 z.p = y

9 if y == T.nil

10 T.root = z11 elseif z.key < y.key

12 y.left = z

13 else y.right = z

14 z.left = T.nil15 z.right = T.nil

16 z.color = T.RED17 RB-Insert-Fixup(T.z)

21 / 97

ExplanationSteps

1 y = T.nil

2 x = T.root3 while x 6=T.nil

4 y = x

5 if z.key<x.key

6 x = x.left7 else x = x.right

8 z.p = y

9 if y == T.nil

10 T.root = z11 elseif z.key < y.key

12 y.left = z

13 else y.right = z

14 z.left = T.nil15 z.right = T.nil

16 z.color = T.RED

17 RB-Insert-Fixup(T,z)

ProcessSearch Variables being Initialized

22 / 97

ExplanationSteps

1 y = T.nil

2 x = T.root3 while x 6=T.nil

4 y = x

5 if z.key<x.key

6 x = x.left7 else x = x.right

8 z.p = y

9 if y == T.nil

10 T.root = z11 elseif z.key < y.key

12 y.left = z

13 else y.right = z

14 z.left = T.nil15 z.right = T.nil

16 z.color = T.RED

17 RB-Insert-Fixup(T,z)

ProcessBinary search for insertion

22 / 97

ExplanationSteps

1 y = T.nil

2 x = T.root3 while x 6=T.nil

4 y = x

5 if z.key<x.key

6 x = x.left7 else x = x.right

8 z.p = y

9 if y == T.nil

10 T.root = z11 elseif z.key < y.key

12 y.left = z

13 else y.right = z

14 z.left = T.nil15 z.right = T.nil

16 z.color = T.RED

17 RB-Insert-Fixup(T,z)

ProcessChange parent of the node to beinserted

22 / 97

ExplanationSteps

1 y = T.nil

2 x = T.root3 while x 6=T.nil

4 y = x

5 if z.key<x.key

6 x = x.left7 else x = x.right

8 z.p = y

9 if y == T.nil

10 T.root = z11 elseif z.key < y.key

12 y.left = z

13 else y.right = z

14 z.left = T.nil15 z.right = T.nil

16 z.color = T.RED

17 RB-Insert-Fixup(T,z)

ProcessTest to see if the Tree is empty!!!

22 / 97

ExplanationSteps

1 y = T.nil

2 x = T.root3 while x 6=T.nil

4 y = x

5 if z.key<x.key

6 x = x.left7 else x = x.right

8 z.p = y

9 if y == T.nil

10 T.root = z11 elseif z.key < y.key

12 y.left = z

13 else y.right = z

14 z.left = T.nil15 z.right = T.nil

16 z.color = T.RED

17 RB-Insert-Fixup(T,z)

ProcessInsert node z in the correct left or rightchild

I if z.key < y.key ⇒ y.left = zI if z.key ≥ y.key ⇒ y.right = z

22 / 97

ExplanationSteps

1 y = T.nil

2 x = T.root3 while x 6=T.nil

4 y = x

5 if z.key<x.key

6 x = x.left7 else x = x.right

8 z.p = y

9 if y == T.nil

10 T.root = z11 elseif z.key < y.key

12 y.left = z

13 else y.right = z

14 z.left = T.nil15 z.right = T.nil

16 z.color = T.RED

17 RB-Insert-Fixup(T,z)

ProcessMake z’s leafs equal to T.nil

22 / 97

ExplanationSteps

1 y = T.nil

2 x = T.root3 while x 6=T.nil

4 y = x

5 if z.key<x.key

6 x = x.left7 else x = x.right

8 z.p = y

9 if y == T.nil

10 T.root = z11 elseif z.key < y.key

12 y.left = z

13 else y.right = z

14 z.left = T.nil15 z.right = T.nil

16 z.color = T.RED

17 RB-Insert-Fixup(T,z)

ProcessMake z’s color equal to RED

22 / 97

ExplanationSteps

1 y = T.nil

2 x = T.root3 while x 6=T.nil

4 y = x

5 if z.key<x.key

6 x = x.left7 else x = x.right

8 z.p = y

9 if y == T.nil

10 T.root = z11 elseif z.key < y.key

12 y.left = z

13 else y.right = z

14 z.left = T.nil15 z.right = T.nil

16 z.color = T.RED

17 RB-Insert-Fixup(T,z)

ProcessIt calls RB-Insert-Fixup on T and z.

22 / 97

Tree-Insert Invariance

Initialization:Prior to the first iteration of the loop, we started with a RBT with noviolations. Then, the algorithm insert the red node z at the bottom of theRBT, and this does not violate properties 1,3 and 5.

The RB-INSERT-FIXUP is called1 If z is the first node to be inserted, you violate the property 2. Then,

it is the only violation on the entire RBT.2 If z is not the first node to be inserted than you could be violating

property 4.

23 / 97

Tree-Insert Invariance

Initialization:Prior to the first iteration of the loop, we started with a RBT with noviolations. Then, the algorithm insert the red node z at the bottom of theRBT, and this does not violate properties 1,3 and 5.

The RB-INSERT-FIXUP is called1 If z is the first node to be inserted, you violate the property 2. Then,

it is the only violation on the entire RBT.2 If z is not the first node to be inserted than you could be violating

property 4.

23 / 97

RB-INSERT-FIXUPRB-Insert-Fixup(T,z)

1 while z.p.color == RED

2 if z.p == z.p.p.left

3 y=z.p.p.right

4 if y.color ==RED

5 z.p.color = BLACK

6 y.color = BLACK

7 z.p.p.color = RED

8 z = z.p.p

9 else if z == z.p.right

10 z = z.p

11 Left-Rotate(T, z)

12 z.p.color = BLACK

13 z.p.p.color = RED

14 Right-Rotate(T, z.p.p)

15 else (“right” and “left” exchanged)

16 T.root.color = BLACK

Case 1Case 1 z’s uncle is RED

I Change of parent and uncle’s color toBLACK

I Move problem to z’s grandfather

24 / 97

RB-INSERT-FIXUPRB-Insert-Fixup(T,z)

1 while z.p.color == RED

2 if z.p == z.p.p.left

3 y=z.p.p.right

4 if y.color ==RED

5 z.p.color = BLACK

6 y.color = BLACK

7 z.p.p.color = RED

8 z = z.p.p

9 else if z == z.p.right

10 z = z.p

11 Left-Rotate(T, z)

12 z.p.color = BLACK

13 z.p.p.color = RED

14 Right-Rotate(T, z.p.p)

15 else (“right” and “left” exchanged)

16 T.root.color = BLACK

Case 2if z is in the right child then

I Move the problem to the parent byz=z.p

I Rotate left using z as the rotationnode

24 / 97

RB-INSERT-FIXUPRB-Insert-Fixup(T,z)

1 while z.p.color == RED

2 if z.p == z.p.p.left

3 y=z.p.p.right

4 if y.color ==RED

5 z.p.color = BLACK

6 y.color = BLACK

7 z.p.p.color = RED

8 z = z.p.p

9 else if z == z.p.right

10 z = z.p

11 Left-Rotate(T, z)

12 z.p.color = BLACK

13 z.p.p.color = RED

14 Right-Rotate(T, z.p.p)

15 else (“right” and “left” exchanged)

16 T.root.color = BLACK

Case 3if z is in the left child then

I Recolor z’s parent to BLACKI recolor z’s grandparent to REDI Rotate right using the grandparent

24 / 97

RB-INSERT-FIXUPRB-Insert-Fixup(T,z)

1 while z.p.color == RED

2 if z.p == z.p.p.left

3 y=z.p.p.right

4 if y.color ==RED

5 z.p.color = BLACK

6 y.color = BLACK

7 z.p.p.color = RED

8 z = z.p.p

9 else if z == z.p.right

10 z = z.p

11 Left-Rotate(T, z)

12 z.p.color = BLACK

13 z.p.p.color = RED

14 Right-Rotate(T, z.p.p)

15 else (“right” and “left” exchanged)

16 T.root.color = BLACK

Root RecoloringAfter pushing the problem up to theroot by the while loop color the root toblack!!!

24 / 97

Maintenance in Insertion in RBTCase I z ’s uncle is red = Recolor parent and uncle to black

1 Recoloring will fix the z.parent.color == red and z.color == red andkeeps the bh property, but will move the problem upwards

2 Nevertheless, the tree rooted at A and B are RBT.3 So new z will be fixed in the next iteration keeping the RBT

properties for the subtrees.

25 / 97

Anomalies after Insertion in RBT

Case 2: z ′s uncle y is black and z is a right child.Case 3: z ′s uncle y is black and z is a left child.

1 Here simple recoloring will not work.2 We rotate first from to left using z3 Then we recolor B.color = BLACK, C.color = RED (No problem γ

and δ are black nodes)4 Then you rotate right using z.p.p to fix the bh property!!!

26 / 97

Example: Insertion in RBT

Example Tree is empty26 1741 14 21 10 712 3028

T.nil

Selection Order

27 / 97

Example: Insertion in RBT

The root becomes red!!!STEPS

1 y = T.nil2 x = T.root3 We never go into

the search loop4 z.p = y5 if y == T.nil6 T.root = z7 z.left = T.nil8 z.right = T.nil9 z.color = T.RED

26 1741 14 21 10 712

30

28

T.nil

Selection Order

z

28 / 97

Example: Insertion in RBT

Fix the problem

ONLY STEP1 T.root.color=BLACK

It happens at the end of theFix-up

26 1741 14 21 10 712

30

28

T.nil

Selection Order

z

29 / 97

Example: Insertion in RBT

Insert 7

1 Do a binarysearch to find aplace to insert

2 Parent of z is notRED ⇒ no fix-up

26 1741 14 21 10

7

12

30

28

T.nil

Selection Order

z

30 / 97

Example: Insertion in RBT

Insert 12

1 Do a binarysearch to find aplace to insert

2 Parent of z isRED!!!

26 1741 14 21 10

7

12

30

28

T.nil

Selection Order

z

31 / 97

Example: Insertion in RBT

Case 2 into Case 3

1 Re-balance first to theleftif z==z.p.right

z=z.pLeft-Rotate(T, z)

26 1741 14 21 10

712

30

28

T.nil

Selection Order

7z

32 / 97

Example: Insertion in RBT

Case 3

1 Re-color andre-balance to the rightz.p.color = BLACKz.p.p.color=REDRight-Rotate(T, z.p.p)

2 No problem to fix3 The root is already

BLACK so nothinghappens

26 1741 14 21 10

712

30

28

T.nil

Selection Order

7z

33 / 97

Example: Insertion in RBT

Insert 10

1 We insert 102 We color it to RED3 We need to fix the

problem

26 1741 14 21

10

712

30

28

T.nil

Selection Order

7

z

y

34 / 97

Example: Insertion in RBT

Case 1

1 if z.p == z.p.p.left2 y=z.p.p.right3 if y.color ==RED

26 1741 14 21

10

712

30

28

T.nil

Selection Order

7

z

y

35 / 97

Example: Insertion in RBT

Case 1

1 if y.color ==RED2 z.p.color = BLACK3 y.color = BLACK4 z.p.p.color = RED5 z = z.p.p

26 1741 14 21

10

712

30

28

T.nil

Selection Order

7

z

36 / 97

Example: Insertion in RBT

Case 1 You get out of the loop and...

1 T.root.color = BLACK

26 1741 14 21

10

712

30

28

T.nil

Selection Order

7

z

37 / 97

Example: Insertion in RBT

Insert 28

1 We insert 282 We color it to RED3 No problem to fix...

26 1741 14 21

10

712

30

28

T.nil

Selection Order

7

z

38 / 97

Example: Insertion in RBT

Insert 28

1 We insert 282 We color it to RED3 No problem to fix...

26 1741 14 21

10

712

30

28

T.nil

Selection Order

7

z

39 / 97

Example: Insertion in RBT

Insert 21

1 We insert 212 We color it to RED3 We need to fix...

26 1741 14

21

10

712

30

28

T.nil

Selection Order

7

z

40 / 97

Example: Insertion in RBT

Case 3

1 Re-color andre-balance to the rightz.p.color = BLACKz.p.p.color=REDRight-Rotate(T, z.p.p)

2 No problem to fix3 The root is already

BLACK so nothinghappens

26 1741 14

2110

712

30

28

T.nil

Selection Order

7

z

41 / 97

Example: Insertion in RBT

Insert 14

1 We insert 142 We color it to RED3 We need to fix...

26 1741

14

2110

712

30

28

T.nil

Selection Order

7

z

42 / 97

Example: Insertion in RBT

Case 1

1 if z.p == z.p.p.left2 y=z.p.p.right3 if y.color ==RED

26 1741

14

2110

712

30

28

T.nil

Selection Order

7

z

y

43 / 97

Example: Insertion in RBT

Case 1

1 if y.color ==RED2 z.p.color = BLACK3 y.color = BLACK4 z.p.p.color = RED5 z = z.p.p

Nothing to do after!!!

26 1741

14

2110

712

30

28

T.nil

Selection Order

7 z

44 / 97

Example: Insertion in RBTInsert 17

1 Do a binary search to find aplace to insert

2 Parent of z is RED!!!

26

17

41

14

2110

712

30

28

T.nil

Selection Order

7 z

z

45 / 97

Case 2 into 3

1 Re-balance first to the leftif z==z.p.right

z=z.pLeft-Rotate(T, z)

26

17

41

14

2110

712

30

28

T.nil

Selection Order

7

z

46 / 97

Example: Insertion in RBTCase 3

1 Re-color andre-balance to the rightz.p.color = BLACKz.p.p.color=REDRight-Rotate(T, z.p.p)

2 No problem to fix3 The root is already

BLACK so nothinghappens

26

17

41

14

2110

712

30

28

T.nil

Selection Order

7

z

46 / 97

Example: Insertion in RBTCase 3

1 Re-color andre-balance to the rightz.p.color = BLACKz.p.p.color=REDRight-Rotate(T, z.p.p)

2 No problem to fix3 The root is already

BLACK so nothinghappens

26

17

41

14

2110

712

30

28

T.nil

Selection Order

7

z

47 / 97

Example: Insertion in RBTCase 3

1 Re-color andre-balance to the rightz.p.color = BLACKz.p.p.color=REDRight-Rotate(T, z.p.p)

2 No problem to fix3 The root is already

BLACK so nothinghappens

26

17

41

1421

10

712

30

28

T.nil

Selection Order

7

z

48 / 97

Example: Insertion in RBTInsert 41

1 Put in the correctnode by binarysearch

2 Because 41’s parentis BLACK nothing tofix

26

17

4114

21

10

712

30

28

T.nil

Selection Order

7

z

49 / 97

Example: Insertion in RBTCase 1 Symmetrical

1 if z.p == z.p.p.right2 y=z.p.p.left3 if y.color ==RED4 z.p.color = BLACK5 y.color = BLACK6 z.p.p.color = RED7 z = z.p.p

26

17

4114

21

10

712

30

28

T.nil

Selection Order

7

z

50 / 97

Example: Insertion in RBTCase 1 Symmetrical

1 if z.p == z.p.p.right2 y=z.p.p.left3 if y.color ==RED4 z.p.color = BLACK5 y.color = BLACK6 z.p.p.color = RED7 z = z.p.p

26

17

4114

21

10

712

30

28

T.nil

Selection Order

7

z

51 / 97

Example: Insertion in RBTCase 2 to case 3 - Symmetrical

1 Re-balance first to the rightif z==z.p.left

z=z.pRight-Rotate(T, z)

26

17

4114

21

10

712

30

28

T.nil

Selection Order

7 z

52 / 97

Example: Insertion in RBTCase 3 - Symmetrical

1 Re-color and re-balance to therightz.p.color = BLACKz.p.p.color=REDLeft-Rotate(T, z.p.p)

2 No problem to fix3 The root is already BLACK so

nothing happens26

17

4114

21

10

712

30

28

T.nil

Selection Order

7 z

53 / 97

Example: Insertion in RBTCase 3 - Symmetrical

1 Re-color and re-balance to therightz.p.color = BLACKz.p.p.color=REDLeft-Rotate(T, z.p.p)

2 No problem to fix3 The root is already BLACK so

nothing happens26

17

4114

21

10

712

30

28

T.nil

Selection Order

7

z

54 / 97

Complexity of RB-Insert

It is easy to see that we have

O(log n) (1)

55 / 97

Outline

1 Red Black TreesDefinitionsLemma for the height of RBTRotations in RBTInsertion in RBTDeletion in RBTExercices

56 / 97

Deletion in RBTRB-DELETE(T,z)

1 y = z2 y-original-color = y.color3 if z.left == T.nil4 x = z.right5 RB-Transplant(T, z, z.right)6 elseif z.right == T.nil7 x = z.left8 RB-Transplant(T, z, z.left)9 else y = Tree-Minimum(z.right)10 y-original-color = y.color11 x = y.right12 if y.p == z13 x.p = y14 else RB-Transplant(T,y,y.right)15 y.right = z.right

16 y.right.p = y

Case 1Store the info of the node to bedeleted

57 / 97

Deletion in RBTRB-DELETE(T,z)

1 y = z2 y-original-color = y.color3 if z.left == T.nil4 x = z.right5 RB-Transplant(T, z, z.right)6 elseif z.right == T.nil7 x = z.left8 RB-Transplant(T, z, z.left)9 else y = Tree-Minimum(z.right)10 y-original-color = y.color11 x = y.right12 if y.p == z13 x.p = y14 else RB-Transplant(T,y,y.right)15 y.right = z.right

16 y.right.p = y

Case 2If the left child is emptyStore the info of the right childMove z.right into the position ofz

57 / 97

Deletion in RBTRB-DELETE(T,z)

1 y = z2 y-original-color = y.color3 if z.left == T.nil4 x = z.right5 RB-Transplant(T, z, z.right)6 elseif z.right == T.nil7 x = z.left8 RB-Transplant(T, z, z.left)9 else y = Tree-Minimum(z.right)10 y-original-color = y.color11 x = y.right12 if y.p == z13 x.p = y14 else RB-Transplant(T,y,y.right)15 y.right = z.right

16 y.right.p = y

Case 3If the right child is emptyStore the info of the left childMove z.left into the position of z

57 / 97

Deletion in RBTRB-DELETE(T,z)

1 y = z2 y-original-color = y.color3 if z.left == T.nil4 x = z.right5 RB-Transplant(T, z, z.right)6 elseif z.right == T.nil7 x = z.left8 RB-Transplant(T, z, z.left)9 else y = Tree-Minimum(z.right)10 y-original-color = y.color11 x = y.right12 if y.p == z13 x.p = y14 else RB-Transplant(T,y,y.right)15 y.right = z.right

16 y.right.p = y

Case 4Find the successor of zStore the info of it: Color andright child

57 / 97

Deletion in RBTRB-DELETE(T,z)

1 y = z2 y-original-color = y.color3 if z.left == T.nil4 x = z.right5 RB-Transplant(T, z, z.right)6 elseif z.right == T.nil7 x = z.left8 RB-Transplant(T, z, z.left)9 else y = Tree-Minimum(z.right)10 y-original-color = y.color11 x = y.right12 if y.p == z13 x.p = y14 else RB-Transplant(T,y,y.right)15 y.right = z.right

16 y.right.p = y

Case 5If parent of succesor is z thenset parent of x to y.right

57 / 97

Deletion in RBTRB-DELETE(T,z)

1 y = z2 y-original-color = y.color3 if z.left == T.nil4 x = z.right5 RB-Transplant(T, z, z.right)6 elseif z.right == T.nil7 x = z.left8 RB-Transplant(T, z, z.left)9 else y = Tree-Minimum(z.right)10 y-original-color = y.color11 x = y.right12 if y.p == z13 x.p = y14 else RB-Transplant(T,y,y.right)15 y.right = z.right

16 y.right.p = y

Case 6Substitute y with y.rightset y.right with z.rightset the parent of y.right with y

57 / 97

Deletion in RBT

RB-DELETE(T,z)

17. RB-Transplant(T, z, y)18. y.left = z.left19. y.left.p = y20. y.color = z.color21. if y-original-color ==BLACK

22. RB-Delete-Fixup(T,x)

Case 7Substitute z with yMake y.left to z.leftMake the parent of y.left to yMake the color of y to the colorof z

58 / 97

Deletion in RBT

RB-DELETE(T,z)

17. RB-Transplant(T, z, y)18. y.left = z.left19. y.left.p = y20. y.color = z.color21. if y-original-color ==BLACK

22. RB-Delete-Fixup(T,x)

Case 8If y-original-color == BLACKthen call RB-Delete-Fixup(T,x)After all x stores the informationof the node that:

I it was moved into the positionof z

I the node that was moved intothe position of y that movedinto the position of z

58 / 97

RB-TRANSPLANT

RB-Transplant(T, u, v)1 if u.p == T.nil2 T.root = v3 elseif u == u.p.left4 u.p.left = v5 else u.p.right = v6 v.p = u.p

59 / 97

We have the following a virtual node y to be deleted

y is a node to be removed or moved around the tree (Look at lines 1or 9 for this)

In line 1, y points to z when it has less than two children and it isremoved.In line 9, when z has two children theny = Tree −Minimum(z .right). Then, y will move to z ′s position.

Now, the color of y ′s can change therefore it gets stored iny − original − color (Lines 2, 10).

Then, when z has two children y 6= z then y moves to z ′s positionand y gets the same color than z .This can produce a violation.

60 / 97

We have the following a virtual node y to be deleted

y is a node to be removed or moved around the tree (Look at lines 1or 9 for this)

In line 1, y points to z when it has less than two children and it isremoved.In line 9, when z has two children theny = Tree −Minimum(z .right). Then, y will move to z ′s position.

Now, the color of y ′s can change therefore it gets stored iny − original − color (Lines 2, 10).

Then, when z has two children y 6= z then y moves to z ′s positionand y gets the same color than z .This can produce a violation.

60 / 97

Cont...

In lines 4, 7, and 11, x is set to point toto y ′s only child orT.nil

Since x moves to y ′s original position, the x .p is pointed to y ′sparent. Then,

if z is not the original y ′s parent x .p takes place in line 6 ofRB-Transplant.if z is the the original y ′s parent, we do not want x .p to point to itsince we are going to remove it.Then, in line 13 of RB-Delete, x .p is set to point to y then that willtake the position of z in line 17.

61 / 97

Cont...

In lines 4, 7, and 11, x is set to point toto y ′s only child orT.nil

Since x moves to y ′s original position, the x .p is pointed to y ′sparent. Then,

if z is not the original y ′s parent x .p takes place in line 6 ofRB-Transplant.if z is the the original y ′s parent, we do not want x .p to point to itsince we are going to remove it.Then, in line 13 of RB-Delete, x .p is set to point to y then that willtake the position of z in line 17.

61 / 97

Cont...

ThenIf y was originally black after taking the z .color can produce a violation,then RB-DELET-FIXUP is called.

This can happenIf y was originally red the RBT properties still hold.

62 / 97

Cont...

ThenIf y was originally black after taking the z .color can produce a violation,then RB-DELET-FIXUP is called.

This can happenIf y was originally red the RBT properties still hold.

62 / 97

Deletion in RBT

QuestionWhat if we delete a black node?

63 / 97

Explanation

We have three problems1 If y was a root and a red child becomes a the new root, we have

violated property 2.2 If both x and x .p are red, then we have violated property 4.3 Moving y around decreases the bh of a single simple path. Property 5

is violated.

64 / 97

Fix-up

HowThis could be fixed assuming that x has an “extra black.”This means that the node is “doubly black” or “red-and-black.”

ThusThe procedure RB-DELETE -FIXUP restores properties 1, 2, and 4 byusing the while loop to push the extra BLACK node up the tree until:

If we have that x is a red-and-black, we simply need to change thecolor of the node to BLACK (Line 23).If we have that x is pointing to the root, remove “extra node.”Use suitable rotations and re-colorings until x stops to be a doublyblack node.

65 / 97

Fix-up

HowThis could be fixed assuming that x has an “extra black.”This means that the node is “doubly black” or “red-and-black.”

ThusThe procedure RB-DELETE -FIXUP restores properties 1, 2, and 4 byusing the while loop to push the extra BLACK node up the tree until:

If we have that x is a red-and-black, we simply need to change thecolor of the node to BLACK (Line 23).If we have that x is pointing to the root, remove “extra node.”Use suitable rotations and re-colorings until x stops to be a doublyblack node.

65 / 97

RB-DELETE-FIXUP(T,x)1 while x 6= T.root and x.color == BLACK2 if x == x.p.left3 w = x.p.right4 if w.color == RED5 w.color = BLACK6 x.p.color = RED7 Left-Rotate(T, x.p)8 w = x.p.right9 if w.left.color == BLACK and w.right.color == BLACK10 w.color = RED11 x = x.p12 else if w.right.color == BLACK13 w.left.color = BLACK14 w.color = RED15 Right-Rotate(T, w)16 w = x.p.right17 w.color = x.p.color18 x.p.color = BLACK19 w.right.color = BLACK20 Left-Rotate(T, x.p)21 x = T.root22 else (same with “right” and “left” exchanged)

23 x.color = BLACK

While loopBecause a violationon the bh has beencreated you need tomove x up until youhave fixed up

66 / 97

RB-DELETE-FIXUP(T,x)1 while x 6= T.root and x.color == BLACK2 if x == x.p.left3 w = x.p.right4 if w.color == RED5 w.color = BLACK6 x.p.color = RED7 Left-Rotate(T, x.p)8 w = x.p.right9 if w.left.color == BLACK and w.right.color == BLACK10 w.color = RED11 x = x.p12 else if w.right.color == BLACK13 w.left.color = BLACK14 w.color = RED15 Right-Rotate(T, w)16 w = x.p.right17 w.color = x.p.color18 x.p.color = BLACK19 w.right.color = BLACK20 Left-Rotate(T, x.p)21 x = T.root22 else (same with “right” and “left” exchanged)

23 x.color = BLACK

Finding who you areFind which child areyouMake w the otherchild

67 / 97

RB-DELETE-FIXUP(T,x)1 while x 6= T.root and x.color == BLACK2 if x == x.p.left3 w = x.p.right4 if w.color == RED5 w.color = BLACK6 x.p.color = RED7 Left-Rotate(T, x.p)8 w = x.p.right9 if w.left.color == BLACK and w.right.color == BLACK10 w.color = RED11 x = x.p12 else if w.right.color == BLACK13 w.left.color = BLACK14 w.color = RED15 Right-Rotate(T, w)16 w = x.p.right17 w.color = x.p.color18 x.p.color = BLACK19 w.right.color = BLACK20 Left-Rotate(T, x.p)21 x = T.root22 else (same with “right” and “left” exchanged)

23 x.color = BLACK

Case 1if x is BLACK and wis REDFix the bh problemby making wBLACK, x’s parentto RED then rotateleft using x’s parentMake w = x.p.rightmoving the problemdown.

68 / 97

Suitable Rotations and Recoloring

Case 1: x ’s sibling w is red. You keep the bh property of the othersubtrees

69 / 97

RB-DELETE-FIXUP(T,x)1 while x 6= T.root and x.color == BLACK2 if x == x.p.left3 w = x.p.right4 if w.color == RED5 w.color = BLACK6 x.p.color = RED7 Left-Rotate(T, x.p)8 w = x.p.right9 if w.left.color == BLACK and w.right.color == BLACK10 w.color = RED11 x = x.p12 else if w.right.color == BLACK13 w.left.color = BLACK14 w.color = RED15 Right-Rotate(T, w)16 w = x.p.right17 w.color = x.p.color18 x.p.color = BLACK19 w.right.color = BLACK20 Left-Rotate(T, x.p)21 x = T.root22 else (same with “right” and “left” exchanged)

23 x.color = BLACK

Case 2Now if w.left’s colorand w.right’s color isBLACKWe do somethingsmart decrease thebh height at w bymaking w’s color toREDMove the problemfropm to x to x.p(After all thesubtree have thesame height at x.p)

70 / 97

Suitable Rotations and Recoloring

Case 2: x’s sibling w is black, and both of w’s children are black.

71 / 97

RB-DELETE-FIXUP(T,x)1 while x 6= T.root and x.color == BLACK2 if x == x.p.left3 w = x.p.right4 if w.color == RED5 w.color = BLACK6 x.p.color = RED7 Left-Rotate(T, x.p)8 w = x.p.right9 if w.left.color == BLACK and w.right.color == BLACK10 w.color = RED11 x = x.p12 else if w.right.color == BLACK13 w.left.color = BLACK14 w.color = RED15 Right-Rotate(T, w)16 w = x.p.right17 w.color = x.p.color18 x.p.color = BLACK19 w.right.color = BLACK20 Left-Rotate(T, x.p)21 x = T.root22 else (same with “right” and “left” exchanged)

23 x.color = BLACK

Case 3If w.right’s color isBLACKWe do somethingsmart, we re-colorand do a rightrotation at wThis does notchange the RBTproperties of wbut prepare thesituation for fixingthe x height problemin case 4.

72 / 97

Suitable Rotations and Recoloring

Case 3: x’s sibling w is black, w’s left child is red, and w’s right childis black.

73 / 97

RB-DELETE-FIXUP(T,x)1 while x 6= T.root and x.color == BLACK2 if x == x.p.left3 w = x.p.right4 if w.color == RED5 w.color = BLACK6 x.p.color = RED7 Left-Rotate(T, x.p)8 w = x.p.right9 if w.left.color == BLACK and w.right.color == BLACK10 w.color = RED11 x = x.p12 else if w.right.color == BLACK13 w.left.color = BLACK14 w.color = RED15 Right-Rotate(T, w)16 w = x.p.right17 w.color = x.p.color18 x.p.color = BLACK19 w.right.color = BLACK20 Left-Rotate(T, x.p)21 x = T.root22 else (same with “right” and “left” exchanged)

23 x.color = BLACK

Case 4We are ready to fixour problem!!! withrespect to x (Case 2and 3 where apreparation to fixthe problem)We increase theheight of the bhwith the problem, x.

74 / 97

Suitable Rotations and Recoloring

Case 4: x’s sibling w is black, and w’s right child is red.

75 / 97

Example: Deletion in RBT

Delete 17

26

17

41

14 21

10

712

30

28

T.nil

7

z

76 / 97

Example: Deletion in RBT

Store the info about z

y = zy-original-color = y.color 26

17

41

14 21

10

712

30

28

T.nil

7

z

77 / 97

Example: Deletion in RBT

None of the children of z are T.nil, thus

else y = Tree-Minimum(z.right)y-original-color = y.color

x = y.right 26

17

41

14 21

10

712

30

28

T.nil

7

z

y

x

78 / 97

Example: Deletion in RBT

We have that y.p 6= z

else RB-Transplant(T,y,y.right)y.right = z.right

y.right.p = y 26

17

41

14 21

10

712

30

28

T.nil

7

z

y

x

79 / 97

Example: Deletion in RBT

Transplant(T, y, y.right)

elseif y == y.p.lefty.p.left = y.right

y.right.p = y.p26

17

41

14 21

10

712

30

28

T.nil

7

z

y

x

y.right.p=y.p

80 / 97

Example: Deletion in RBT

Now, we move pointers

y.right = z.right

y.right.p = y 26

17

41

14 21

10

712

30

28

T.nil

7

z

y

x

y.right.p=y

81 / 97

Example: Deletion in RBT

Transplant(z,y)

if z.p == T.nilT.root = y

y.p = z.p26

17

41

14

21

10

712

30

28

T.nil

7

z y

x

y.p = z.p

82 / 97

Example: Deletion in RBT

Move pointers

y.left = z.lefty.left.p = y

y.color = z.color 26

17

41

14

21

10

712

30

28

T.nil

7

z y

x

y.left.p = y

83 / 97

Example: Deletion in RBT

We remove z safely and we go into Delete-Fixup(T,x)

z.right = NULLz.left = NULLz.parent = NULL

26

17

41

14

21

10

712

30

28

T.nil

7

z y

x

84 / 97

Example: Deletion in RBT

We remove z safely and we go into Delete-Fixup(T,x)

Never enter into the loopSimply do x.color =BLACK

2641

14

21

10

712

30

28

T.nil

7

y

x

85 / 97

Example: Deletion in RBT

Delete 12

26

17

41

14 21

10

712

30

28

T.nil

7

z

86 / 97

Example: Deletion in RBT

None of the children of z are T.nil, thus

else y = Tree-Minimum(z.right)y-original-color = y.color

(BLACK)

x = y.right (T.NIL)26

17

41

14 21

10

712

30

28

T.nil

7

z

y

x

87 / 97

Example: Deletion in RBT

We have that y.p== z

if y.p == z

x.p = y 26

17

41

14 21

10

712

30

28

T.nil

7

z

y

x

88 / 97

Example: Deletion in RBT

Next

RB-Transplant(T, z, y)y.left = z.lefty.left.p = y

y.color = z.color26

17

41

14 21

10

712

30

28

T.nil

7

z

y

x

89 / 97

Example: Deletion in RBT

Next

RB-Transplant(T, z, y)y.left = z.lefty.left.p = y

y.color = z.color26

17

41

14 21

10

712

30

28

T.nil

7

z

y

x

90 / 97

Example: Deletion in RBT

Next

RB-Transplant(T, z, y)y.left = z.lefty.left.p = y

y.color = z.color26

17

41

14 21

10

712

30

28

T.nil

7

z

y

x

91 / 97

Example: Deletion in RBT

We remove z safely and we go into Delete-Fixup(T,x)

enter into the loopif x == x.p.right

w = x.p.left 26

17

41

14

21

10

30

28

T.nil

7

y

x

w

92 / 97

Example: Deletion in RBT

We enter into case 4

1 w.color = x.p.color

2 x.p.color = BLACK

3 w.right.color = BLACK26

17

41

14

21

10

30

28

T.nil

7

x

w

93 / 97

Example: Deletion in RBT

Rotate and move the x

1 Left-Rotate(T, x.p)

2 x = T.root 26

17

41

1421

10 30

28

T.nil

7

x

94 / 97

Applications of Red-Black Trees

Completely Fair Scheduler (CFS)It is a task scheduler which was merged into 2.6.23 release of theLinux Kernel.It is a replacement of earlier O(1) scheduler.CFS algorithm was designed to maintain balance (fairness) inproviding processor time to tasks.

Sorting using Parallel ImplementationsRunning in O(log log n) time

95 / 97

Applications of Red-Black Trees

Completely Fair Scheduler (CFS)It is a task scheduler which was merged into 2.6.23 release of theLinux Kernel.It is a replacement of earlier O(1) scheduler.CFS algorithm was designed to maintain balance (fairness) inproviding processor time to tasks.

Sorting using Parallel ImplementationsRunning in O(log log n) time

95 / 97

Outline

1 Red Black TreesDefinitionsLemma for the height of RBTRotations in RBTInsertion in RBTDeletion in RBTExercices

96 / 97

Exercices

From Cormen’s book solve13.1-113.1-313.1-513.1-713.2-213.2-313.2-413.2-513.3-213.3-413.4-213.4-4

97 / 97

top related