Red Black Trees: Colored Nodes Definition Red
Red Black Trees: Colored Nodes Definition Red
Colored Nodes Definition Binary search tree. Each node is colored red or black. Root and all external nodes are black. No root-to-external-node path has two consecutive red nodes. All root-to-external-node paths have the same number of black nodes
40
30
35
45
20 25
60
Properties
The height of a red black tree that has n (internal) nodes is between log2(n+1) and 2log2(n+1).
Properties
Start with a red black tree whose height is h; collapse all red nodes into their parent black nodes to get a tree whose node-degrees are between 2 and 4, height is >= h/2, and all external nodes are at the same level.
Properties
10
7 3 8 30 35
40 45
20
25
60
Properties
Let h>= h/2 be the height of the collapsed tree. Internal nodes of collapsed tree have degree between 2 and 4. Number of internal nodes in collapsed tree >= 2h-1. So, n >= 2h-1 So, h <= 2 log2 (n + 1)
Properties
At most 1 rotation and O(log n) color flips per insert/delete. Priority search trees.
Two keys per element. Search tree on one key, priority queue on other. Color flip doesnt disturb priority queue property. Rotation disturbs priority queue property. O(log n) fix time per rotation => O(log2n) overall time for AVL.
Properties
O(1) amortized complexity to restructure following an insert/delete. C++ STL implementation java.util.TreeMap => red black tree
Insert
New pair is placed in a new node, which is inserted into the red-black tree. New node color options.
Black node => one root-to-external-node path has an extra black node (black pointer).
Hard to remedy.
Red node => one root-to-external-node path may have two consecutive red nodes (pointers).
May be remedied by color flips and/or a rotation.
XYz
a b X => relationship between gp and pp. pp left child of gp => X = L. Y => relationship between pp and p. p left child of pp => Y = L.
Color flip.
gp
pp p a b d c
XYr
gp
pp p a b d c
LLb
Rotate.
gp
pp p a
x y z x
y
z
d c a b c d
LRb
Rotate.
gp
pp
x z x y z
a
b
d p c
Done! Same as LR rotation of AVL tree. RRb and RLb are symmetric.
Delete
Delete as for unbalanced binary search tree. If red node deleted, no rebalancing needed. If black node deleted, a subtree becomes one black pointer (node) deficient.
7 3 8 30 35
40 45
20 25
60
Delete 8.
py
3
40
y
5 20
30 35
45
60
25
7 3 8 30 35
40
py
45
20 25
60
7 3 8 30 35
40 45
20 25
60
Rebalancing Strategy
If y is a red node, make it black.
10
7
3 8 30 35
40
py
45
20 25
60
Rebalancing Strategy
Now, no subtree is deficient. Done!
10
7
3 8 30 35
40
py
45
20 25
60
Rebalancing Strategy
y is a black root (there is no py). Entire tree is deficient. Done!
10
y
40
7 3 8 30 35
45
20 25
60
Rebalancing Strategy
y is black but not the root (there is a py).
py
v a b y
Xcn y is right child of py => X = R. Pointer to v is black => c = b. v has 1 red child => n = 1.
Rb1 (case 1)
py v a b y a v py b y
Rb1 (case 2)
py v y v w py
a
b
w
c
Rb2
py v y v w py
a
b
w
c
Rr(n)
n = # of red children of vs right child w.
py
v
a b
w
c
Rr(0)
py v a b y a v py b y
LL rotation. Done!
Rr(1) (case 1)
py v y v w py
a
b
w
c
Rr(1) (case 2)
py v y v x py
a
b c
w
x d
a
b
w
c
Rr(2)
py v y v x py
a
b c
w
x d
a
b
w
c