You are on page 1of 9

Chapter 47 Red Black Trees

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807

Objectives
To

know what a red-black tree is (47.1). To convert a red-black tree to a 2-4 tree and vice versa (47.2). To design the RBTree class that extends the BinaryTree class (47.3). To insert an element in a red-black tree and resolve the double red problem if necessary (47.4). To insert an element from a red-black tree and resolve the double black problem if necessary (47.5). To implement and test the RBTree class (47.6-47.7). To compare the performance of AVL trees, 2-4 trees, and RBTree (47.8).
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807

What is a Red Black Tree?


A red-black tree is a binary search tree, which is derived from a 2-4 tree. A red-black tree corresponds to a 2-4 tree. Each node in a redblack tree has a color attribute red or black.
20

15 20 3

34 25 27

15

34

16

50

16

25

50

27

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807

What is a Red Black Tree?


A node is called external if its left or right subtree is empty. Note that a leaf node is external, but an external node is not necessarily a leaf node. For example, node 25 is external, but it is not a leaf. The black depth of a node is defined as the number of black nodes in a path from the node to the root. For example, the black depth of node 25 is 2 and the black depth of node 27 is 2.

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807

Properties
A red-black tree has the following properties:

The root is black. Two adjacent nodes cannot be both red. All external nodes have the same black depth.

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807

Conversion between Red-Black Trees and 2-4 Trees


To convert a red-black tree to a 2-4 tree, simply merge any red nodes with its parent to create a 3-node or a 4-node. To convert a 2-4 tree to a red-black tree, perform the transformations for each node :
2-3-4 Tree e (a) Converting a 2-node c0 c1 c0 Equivalent red-black tree e c1

(b) Converting a 3-node c0

e0 c1

e1 c2 c0

e0 or

e1 e1 e0

c2 c1

c1

c2

c0

(c) Converting a 4-node c0

e0 c1

e1 e2 c2 c3 c0 e0

e1

e2

c1

c2

c3

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807

Conversion not unique


the conversion from a 2-4 tree to a red-black tree is not unique.
20
20
16

15 3 25 27

34
3

15 25

34
3

15 27

34

16

50

16

50

16

50

27

25

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807

2-4 Tree Animation


http://www.cs.armstrong.edu/liang/animation/RBTreeAnimation.htm l

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807

Designing Classes for Red Black Trees


TreeNode<E>

BianryTree<E>
m 0

RBTreeNode<E>
-red: boolean +RBTreeNode() +RBTreeNode(e: E) +isRed(): boolean +isBlack(): boolean +setRed(): void +setBlack(): void
1 Link

RBTree<E>
+RBTree() +RBTree(objects: E[]) #createNewNode(): RBTreeNode<E> +insert(o: E): boolean +delete(o: E): boolean Creates a default red-black tree. Creates an RBTree from an array of objects. Override this method to create an RBTreeNode. Returns true if the element is added successfully. Returns true if the element is removed from the tree successfully.

RB Tree TestRBTree Run


Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807

You might also like