Red Black Tree Essentials Notes from “Introduction to Algorithms”, Cormen et al.

8
Red Black Tree Essentials Notes from “Introduction to Algorithms”, Cormen et al.

Transcript of Red Black Tree Essentials Notes from “Introduction to Algorithms”, Cormen et al.

Page 1: Red Black Tree Essentials Notes from “Introduction to Algorithms”, Cormen et al.

Red Black Tree Essentials

Notes from “Introduction to Algorithms”, Cormen et al.

Page 2: Red Black Tree Essentials Notes from “Introduction to Algorithms”, Cormen et al.

Definition

Red Black Trees

A red-black tree is a binary search tree with an extra bit of storage per node.The extra bit represents the color of the node. It's either red or black.Each node contains the fields: color, key, left, right, and p. Any nil pointers are regarded as pointers to external nodes (leaves) and key bearingnodes are considered as internal nodes of the tree.See the video at:http://www.youtube.com/watch?v=vDHFF4wjWYU

Page 3: Red Black Tree Essentials Notes from “Introduction to Algorithms”, Cormen et al.

Properties

Red-black tree 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 of its children are black. 5. For each node, all paths from the node to descendant leaves contain the same number of black nodes.

Page 4: Red Black Tree Essentials Notes from “Introduction to Algorithms”, Cormen et al.

Implications

• From these properties, it can be shown (with a proof by induction) that the tree has a height no more than 2 * Lg(n + 1).• Thus, worst case lookUp, insert, delete are all

Θ(Log n).

Page 5: Red Black Tree Essentials Notes from “Introduction to Algorithms”, Cormen et al.

Three essential methods

• Rotation • Insertion• Insert-fixUp

Page 6: Red Black Tree Essentials Notes from “Introduction to Algorithms”, Cormen et al.

LeftRotate(T,x) pre: right[x] != nil[T] pre: root's parent is nill[T]

Left-Rotate(T,x) y = right[x] right[x] = left[y] p[left[y]] = x p[y] = p[x] if p[x] == nil[T] then root[T] = y else if x == left[p[x]] then left[p[x]] = y else right[p[x]] = y left[y] = x p[x] = y

Page 7: Red Black Tree Essentials Notes from “Introduction to Algorithms”, Cormen et al.

Red Black Insert RB-Insert(T,z) y = nil[T] x = root[T] while x != nil[T] y = x if key[z] < key[x] then x = left[x] else x = right[x] p[z] = y if y = nil[T] root[T] = z else if key[z] < key[y] then left[y] = z else right[y] = z

left[z] = nil[T]right[z] = nil[T]color[z] = REDRB-Insert-fixup(T,z)

Page 8: Red Black Tree Essentials Notes from “Introduction to Algorithms”, Cormen et al.

RB-Insert-fixup(T,z)RB-Insert-fixup(T,z) { while(z's parent is Red) { set y to be z's uncle if uncle y is Red { color parent and uncle black color grandparent red set z to grandparent } else { // the uncle is black if (zig zag) { // make it a zig zig set z to parent rotate to zig zig } // rotate the zig zig and finish color parent of z black color grandparent of z red rotate grand parent of z } } // end while color root black }