Red-Black trees Red-black trees are 2-3-4 trees represented as binary trees at the expense of one...
-
Upload
edward-bruce -
Category
Documents
-
view
221 -
download
7
description
Transcript of Red-Black trees Red-black trees are 2-3-4 trees represented as binary trees at the expense of one...
Red-Black trees
Red-black trees are 2-3-4 trees represented as binary trees at the expense ofone extra bit per node. The idea is to represent 3- and 4-nodes as mini-binary trees, bound by “red” links.
Red-black trees have the following properties:
1 3-nodes can be represented in two different ways.2 Two red links never follow one another in a row.3 All paths in the red-black tree have the same number of black links.4 One path containing red and black links can be twice as long as
another path containing only black links.5 All path lengths are proportional to log N.6 Nodes with data items equal to a given node can fall on both sides of
that node.
Examples
1 2 32
1 3
9 1515 9
10 16 20
3 7 8 12 13 18
9 15
25
16
10 20
7 12 18 25
3 8 13
OR
Operations on red-black trees
Search: same as in binary search trees, except for the need of a boolean attribute black that each node must maintain.
Insert: same as in 2-3-4 trees, except that the colors of the links must be taken into consideration.
Delete: similar to deletion in binary search trees. We can always delete a node that has at least one external child. However, if the key to be deleted is stored in a node with no external children, we move there the key of its inorder predecessor (or successor), and delete that node instead.
Example: 7 5
4 8 4 8
2 5 9 2 9
Insert operation: example
Insert 15
16
10 20
12 18 25
13
7
3 8 16
10 20
7 13 18 25
3 8 15
Split
12
Splitting 4-nodes without rotation
Case1: Splitting a 4-node connected to a 2-node
Splitting 4-nodes without rotation (contd.)
Case2A: Splitting a 4-node connected to a 3-node
Splitting 4-nodes with single rotation
Case2B: Splitting a 4-node connected to a 3-node
Splitting 4-nodes with double rotationCase2C: Splitting a 4-node connected to a 3-node
Reducedto case 2B
The insertRB methodAlgorithm insertRB (T, newData, precedes)
boolean success := falseif (T = null) { NodeRBtree node = new NodeRBtree(newData) success := true }else { if (nodeType(T)= 4) splitroot(T) NodeRBtree p := T; NodeRBtree parent := null; boolean done := false while (! done) { if (nodeType(p) = 4) { if (nodeType (parent) = 2) then splitChildOf2 (p, parent) else splitChildOf3 (p, parent) } int compareResult := compare (p, newData, precedes) if (compareResult < 0) then success := false; done := true else if (compareResult = 0) then insertData (p, newData, precedes); success:=true; done:=true else advance (p, parent, compareResult) } // end while } // end else