0% found this document useful (0 votes)
44 views24 pages

Red-Black Trees: Introduction To Algorithms

The document discusses red-black trees, which are self-balancing binary search trees. Red-black trees ensure that the tree remains balanced during insertions and deletions by coloring each node red or black, and enforcing certain coloring properties. The summary describes: 1. Red-black trees use rotations and recoloring to balance the tree during insertions while maintaining the red-black coloring properties. 2. The insertion process involves inserting the node normally for a binary search tree, then calling a fixup procedure to perform rotations and recoloring to restore the red-black properties. 3. There are three cases handled in the fixup procedure depending on whether the uncle is red or black. Rotations

Uploaded by

A R
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
44 views24 pages

Red-Black Trees: Introduction To Algorithms

The document discusses red-black trees, which are self-balancing binary search trees. Red-black trees ensure that the tree remains balanced during insertions and deletions by coloring each node red or black, and enforcing certain coloring properties. The summary describes: 1. Red-black trees use rotations and recoloring to balance the tree during insertions while maintaining the red-black coloring properties. 2. The insertion process involves inserting the node normally for a binary search tree, then calling a fixup procedure to perform rotations and recoloring to restore the red-black properties. 3. There are three cases handled in the fixup procedure depending on whether the uncle is red or black. Rotations

Uploaded by

A R
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 24

Introduction to Algorithms

Red-Black Trees

CSE 680
Prof. Roger Crawfis
Red-black trees: Overview

 Red-black trees are a variation of binary


search trees to ensure that the tree is
balanced.
 Height is O(lg n), where n is the number of
nodes.
 Operations take O(lg n) time in the worst
case.
Red-black trees: Overview
 Red-black trees are a variation of binary
search trees to ensure that the tree is
somewhat balanced.
 Height is O(lg n), where n is the number of
nodes.
 Operations take O(lg n) time in the worst
case.

 Easiest of the balanced search trees, so


they are used in STL map operations…
Red-black Tree

 Binary search tree + 1 bit per node: the


attribute color, which is either red or black.
 All other attributes of BSTs are inherited:
 key, left, right, and p.

 All empty trees (leaves) are colored black.


 We use a single sentinel, nil, for all the leaves
of red-black tree T, with color[nil] = black.
 The root’s parent is also nil[T ].
Red-black Properties

1. 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.
Red-black Tree – Example
26
Remember: every internal
node has two children, even
though nil leaves are not
17 41 usually shown.

30 47

38 50

nil[T]
Height of a Red-black Tree

 Height of a node:
 h(x) = number of edges in a longest path to a
leaf.
 Black-height of a node x, bh(x):
 bh(x) = number of black nodes (including nil[T ])
on the path from x to leaf, not counting x.
 Black-height of a red-black tree is the
black-height of its root.
 By Property 5, black height is well defined.
Height of a Red-black Tree
h=4
 Example: 26 bh=2

 Height of a node:
h(x) = # of edges in a h=3
17 h=1 41 bh=2
longest path to a bh=1
leaf.
 Black-height of a node h=2
h=2 30
bh(x) = # of black bh=1
47 bh=1
nodes on path from x h=1
bh=1
to leaf, not counting x. h=1 50
38
bh=1
 How are they related?
 bh(x) ≤ h(x) ≤ 2 bh(x)
nil[T]
Lemma “RB Height”
Consider a node x in an RB tree: The longest
descending path from x to a leaf has length h(x),
which is at most twice the length of the shortest
descending path from x to a leaf.
Proof:
# black nodes on any path from x = bh(x) (prop 5)
 # nodes on shortest path from x, s(x). (prop 1)
But, there are no consecutive red (prop 4),
and we end with black (prop 3), so h(x) ≤ 2 bh(x).
Thus, h(x) ≤ 2 s(x). QED
Bound on RB Tree Height

 Lemma 13.1: A red-black tree with n


internal nodes has height at most
2 lg(n+1).
Rotations

x Left-Rotate(T, x) y

 y Right-Rotate(T, y) x 
   
Rotations
 Rotations are the basic tree-restructuring operation for almost all
balanced search trees.
 Rotation takes a red-black-tree and a node,
 Changes pointers to change the local structure, and
 Won’t violate the binary-search-tree property.
 Left rotation and right rotation are inverses.

x Left-Rotate(T, x) y

 y Right-Rotate(T, y) x 
   
Left Rotation – Pseudo-code
Left-Rotate (T, x)
1. y  right[x] // Set y.
2. right[x]  left[y] //Turn y’s left subtree into x’s right subtree.
3. if left[y]  nil[T ]
4. then p[left[y]]  x
5. p[y]  p[x] // Link x’s parent to y.
6. if p[x] = nil[T ]
7. then root[T ]  y x Left-Rotate(T, x) y
8. else if x = left[p[x]]
9. then left[p[x]]  y  y Right-Rotate(T, y) x 
10. else right[p[x]]  y   

11. left[y]  x // Put x on y’s left.
12. p[x]  y
Rotation

 The pseudo-code for Left-Rotate assumes that


 right[x]  nil[T ], and
 root’s parent is nil[T ].
 Left Rotation on x, makes x the left child of y, and
the left subtree of y into the right subtree of x.
 Pseudocode for Right-Rotate is symmetric:
exchange left and right everywhere.
 Time: O(1) for both Left-Rotate and Right-Rotate,
since a constant number of pointers are modified.
Reminder: Red-black
Properties
1. 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.
Insertion in RB Trees
 Insertion must preserve all red-black properties.
 Should an inserted node be colored Red?
Black?
 Basic steps:
 Use Tree-Insert from BST (slightly modified) to
insert a node x into T.
 Procedure RB-Insert(x).
 Color the node x red.
 Fix the modified tree by re-coloring nodes and
performing rotation to preserve RB tree property.
 Procedure RB-Insert-Fixup.
Insertion – Fixup

 Problem: we may have one pair of


consecutive reds where we did the
insertion.
 Solution: rotate it up the tree and away…

 Three cases have to be handled…


Insertion – Fixup
RB-Insert-Fixup (T, z)
1. while color[p[z]] = RED
2. do if p[z] = left[p[p[z]]]
3. then y  right[p[p[z]]]
4. if color[y] = RED
5. then color[p[z]]  BLACK // Case 1
6. color[y]  BLACK // Case 1
7. color[p[p[z]]]  RED // Case 1
8. z  p[p[z]] // Case 1
Insertion – Fixup
RB-Insert-Fixup(T, z) (Contd.)
9. else if z = right[p[z]] // color[y]  RED
10. then z  p[z] // Case 2
11. LEFT-ROTATE(T, z) // Case 2
12. color[p[z]]  BLACK // Case 3
13. color[p[p[z]]]  RED // Case 3
14. RIGHT-ROTATE(T, p[p[z]]) // Case 3
15. else (if p[z] = right[p[p[z]]])(same as 10-14
16. with “right” and “left” exchanged)
17. color[root[T ]]  BLACK
Case 1 – uncle y is red
p[p[z]]
new z
C
C
p[z]
y
A D A D
z
     
B
B
z is a right child here.
Similar steps if z is a left child.
   
 p[p[z]] (z’s grandparent) must be black, since z and p[z] are both red and there are no
other violations of property 4.
 Make p[z] and y black  now z and p[z] are not both red. But property 5 might now be
violated.
 Make p[p[z]] red  restores property 5.
 The next iteration has p[p[z]] as the new z (i.e., z moves up 2 levels).
Case 2 – y is black, z is a right
child
C C
p[z]
p[z]
A  y B  y

z
 z 
B A

  

 Left rotate around p[z], p[z] and z switch roles  now z is a left child, and
both z and p[z] are red.
 Takes us immediately to case 3.
Case 3 – y is black, z is a left
child
C B

p[z]

B  y A C

z
   
A 

 

 Make p[z] black and p[p[z]] red.


 Then right rotate on p[p[z]]. Ensures property 4 is maintained.
 No longer have 2 reds in a row.
 p[z] is now black  no more iterations.
Algorithm Analysis

 O(lg n) time to get through RB-Insert up to


the call of RB-Insert-Fixup.
 Within RB-Insert-Fixup:
 Each iteration takes O(1) time.
 Each iteration but the last moves z up 2 levels.
 O(lg n) levels  O(lg n) time.
 Thus, insertion in a red-black tree takes O(lg n)
time.
 Note: there are at most 2 rotations overall.
Deletion
 Deletion, like insertion, should preserve all
the RB properties.
 The properties that may be violated
depends on the color of the deleted node.
 Red – OK.
 Black?
 Steps:
 Do regular BST deletion.
 Fix any violations of RB properties that may
result.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy