+ All Categories
Home > Documents > Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for...

Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for...

Date post: 02-Jan-2016
Category:
Upload: byron-arnold-rodgers
View: 217 times
Download: 0 times
Share this document with a friend
Popular Tags:
52
Balancing Binary Search Trees
Transcript
Page 1: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Balancing Binary Search Trees

Page 2: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Balanced Binary Search Trees

• A BST is perfectly balanced if, for every node, the difference between the number of nodes in its left subtree and the number of nodes in its right subtree is at most one

• Example: Balanced tree vs Not balanced tree

Page 3: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Balancing Binary Search Trees

• Inserting or deleting a node from a (balanced) binary search tree can lead to an unbalance

• In this case, we perform some operations to rearrange the binary search tree in a balanced form– These operations must be easy to perform and must

require only a minimum number of links to be reassigned

– Such kind of operations are Rotations

Page 4: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Tree Rotations

• The basic tree-restructuring operation• There are left rotation and right rotation. They

are inverses of each other

[CLRS Fig. 13.1]

Page 5: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Tree Rotations

• Changes the local pointer structure. (Only pointers are changed.)

• A rotation operation preserves the binary-search-tree property: the keys in α precede x.key, which precedes the keys in β, which precede y.key, which precedes the keys in γ .

Page 6: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Implementing Rotations

Page 7: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

[CLRS Fig. 13.3]

Page 8: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Balancing Binary Search Trees

• Balancing a BST is done by applying simple transformations such as rotations to fix up after an insertion or a deletion

• Perfectly balanced BST are very difficult to maintain

• Different approximations are used for more relaxed definitions of “balanced”, for example:– AVL trees– Red-black trees

Page 9: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

AVL trees

• Adelson Velskii and Landes• An AVL tree is a binary search tree that is height

balanced: for each node x, the heights of the left and right subtrees of x differ by at most 1.

• AVL Tree vs Non-AVL Tree

Page 10: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

AVL Trees

• AVL trees are height-balanced binary search trees

• Balance factor of a node– height(left subtree) - height(right subtree)

• An AVL tree has balance factor calculated at every node– For every node, heights of left and right

subtree can differ by no more than 1

Page 11: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Height of an AVL Tree

• How many nodes are there in an AVL tree of height h ?

• N(h) = minimum number of nodes in an AVL tree of height h.

• Base Case:– N(0) = 1, N(1) = 2

• Induction Step:– N(h) = N(h-1) + N(h-2) + 1

• Solution: – N(h) > h ( 1.62)

h-1h-2

h

Page 12: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Height of an AVL Tree

• N(h) > h ( 1.62)

• What is the height of an AVL Tree with n nodes ?

• Suppose we have n nodes in an AVL tree of height h.– n > N(h) (because N(h) was the minimum)

– n > h hence log n > h

– h < 1.44 log2n ( h is O(logn))

Page 13: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Insertion into an AVL trees

1. place a node into the appropriate place in binary search tree order

2. examine height balancing on insertion path:1. Tree was balanced (balance=0) => increasing the height of a

subtree will be in the tolerated interval +/-12. Tree was not balanced, with a factor +/-1, and the node is

inserted in the smaller subtree leading to its height increase => the tree will be balanced after insertion

3. Tree was balanced, with a factor +/-1, and the node is inserted in the taller subtree leading to its height increase => the tree is no longer height balanced (the heights of the left and right children of some node x might differ by 2) • we have to balance the subtree rooted at x using rotations• How to rotate ? => see 4 cases according to the path to the new

node

Page 14: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Example – AVL insertions

10

152

81

0

1

2

0

10

8 15

Case 1: Node’s Left – Left grandchild is too tall

RIGHT-ROTATE

Page 15: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

AVL insertions – Right Rotation

hh

h

x

y

h

h h

x

y

Balance: 1

Balance: 2Balance: 0

Case 1: Node’s Left – Left grandchild is too tall

h+2h+2

Height of tree after balancing is the same as before insertion !

Page 16: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Example – AVL insertions

8

3 15

4

Case 2: Node’s Left-Right grandchild is too tall

5

5

83

1542

Solution: do a Double Rotation: LEFT-ROTATE and RIGHT-ROTATE

2

8

155

3

2 4

Page 17: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Double Rotation – Case Left-Right

x

z

y

hh-1 h-1

Balance: -1

Balance: 2

Case 2: Node’s Left-Right grandchild is too tall

h+2

Page 18: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Double Rotation – Case Left-Right

h

zx

y

h

h-1 h-1

Balance: 0 or 1 Balance: 0 or -1

Balance: 0

h+2

Height of tree after balancing is the same as before insertion ! => there are NO upward propagations of the unbalance !

Page 19: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Example – AVL insertions

10

152

2013

25

10

15

2

20

13 25

Case 3: Node’s Right – Right grandchild is too tall

LEFT-ROTATE

Page 20: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

AVL insertions – Left Rotation

h

h h

x

y

hh

h

x

y

Balance: -1

Balance: -2Balance: 0

Case 3: Node’s Right – Right grandchild is too tall

Page 21: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Example – AVL insertions

5

83

15

6

Case 4: Node’s Right – Left grandchild is too tall

7

5

73

8

15

6

7

85

1563

Solution: do a Double Rotation: RIGHT-ROTATE and LEFT-ROTATE

Page 22: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Double Rotation – Case Right-Left

h

z

x

y

hh-1 h-1

Balance: 1 or -1

Balance: 1

Balance: -2

Case 4: Node’s Right – Left grandchild is too tall

Page 23: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Double Rotation – Case Right-Left

h

zx

y

h

h-1 h-1

Balance: 0 or 1 Balance: -1 or 0

Balance: 0

Page 24: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Implementing AVL Trees

• Insertion needs information about the height of each node

• It would be highly inefficient to calculate the height of a node every time this information is needed => the tree structure is augmented with height information that is maintained during all operations

• An AVL Node contains the attributes: – Key– Left, right, p– Height

Page 25: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.
Page 26: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Case 2 – Left-Right

Case 1 – Left-Left

Case 4 – Right-Left

Case 3 – Right-Right

Page 27: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Analysis of AVL-INSERT

• Insertion makes O(h) steps, h is O(log n), thus Insertion makes O(log n) steps

• At every insertion step, there is a call to Balance, but rotations will be performed only once for the insertion of a key. It is not possible that after doing a balancing, unbalances are propagated , because the BALANCE operation restores the height of the subtree before insertion. => number of rotations for one insertion is O(1)

• AVL-INSERT is O(log n)

Page 28: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

AVL Delete

• The procedure of BST deletion of a node z:– 1 child: delete it, connect child to parent– 2 children: put successor in place of z, delete

successor

• Which nodes’ heights may have changed:– 1 child: path from deleted node to root– 2 children: path from deleted successor leaf to root

• AVL Tree may need rebalancing as we return along the deletion path back to the root

Page 29: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Exercise

• Insert following keys into an initially empty AVL tree. Indicate the rotation cases:

• 14, 17, 11, 7, , 3, 14, 12, 9

Page 30: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

AVL delete – Right Rotation

h-1

y

x

Balance: 1

Balance: 2

Case 1: Node’s Left-Left grandchild is too tall

h-1

h

y

x Balance: 0

h-1 h-1

Delete node in right child, the height of the right child decreases

The height of tree after balancing decreases !=> Unbalance may propagate

h

h+2 h+1

Page 31: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

AVL delete – Double RotationCase 2: Node’s Left-Right grandchild is too tall

Delete node in right child, the height of the right child decreases

x

y Balance: 0

h-1 h-1

z

h-1 h-1

The height of tree after balancing decreases !=> Unbalance may propagate

h+2 h+1

z

x

Balance: 1

Balance: 2

h-1y

h-1 h-1

h-1

Page 32: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

AVL delete – Left Rotation

h-1

h

x

y

Balance: -1

Balance: -2

Case 3: Node’s Right – Right grandchild is too tall

h-1

h

x

y Balance: 0

h-1 h-1

Delete node in left child, the height of the left child decreases

The height of tree after balancing decreases !=> Unbalance may propagate

h+2 h+1

Page 33: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

AVL delete – Double Rotation

h-1

x

z

Balance: 1

Balance: -2

Case 4: Node’s Right – Left grandchild is too tall

h-1

Delete node in left child, the height of the left child decreases

y

h-1 h-1

x

y Balance: 0

h-1 h-1

z

h-1 h-1

The height of tree after balancing decreases !=> Unbalance may propagate

h+2 h+1

Page 34: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Analysis of AVL-DELETE

• Deletion makes O(h) steps, h is O(log n), thus deletion makes O(log n) steps

• At the deletion of a node, rotations may be performed for all the nodes of the deletion path which is O(h)=O(log n) ! In the worst case, it is possible that after doing a balancing, unbalances are propagated on the whole path to the root !

Page 35: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Exercise

11

7 14

5 129 17

3 86 10 20

1 What happens if key 12 is deleted ?

Page 36: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

AVL Trees - Summary

• AVL definition of balance: for each node x, the heights of the left and right subtrees of x differ by at most 1.

• Maximum height of an AVL tree with n nodes is h < 1.44 log2n

• AVL-Insert: O(log n), Rotations: O(1) (For Insert, unbalances are not propagated after they are solved once)

• AVL-Delete: O(log n), Rotations: O(log n) (For Delete, unbalances may be propagated up to the root)

Page 37: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Red-Black Trees or 2-3-4 Trees

• Idea for height reduction: let’s put more keys into one node!

• 2-3-4 Trees: – Nodes may contain 1, 2 or 3 keys– Nodes will have, accordingly, 2, 3 or 4 children– All leaves are at the same level

Page 38: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

2-3-4 Trees Nodes

a

>a<aa b c

<a>aand<b

>band<c

>c

a b

>aand <b

<a >b

Page 39: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Example: 2-3-4 Tree

8 13 17

22 25 27 1 6 11 15

Page 40: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Transforming a 2-3-4 Tree into aBinary Search Tree

• A 2-3-4 tree can be transformed into a Binary Search tree (called also a Red-Black Tree):– Nodes containing 2 keys will be transformed in 2 BST

nodes, by adding a red (“horizontal”) link between the 2 keys

– Nodes containing 3 keys will be transformed in 3 BST nodes, by adding two red (“horizontal”) links originating at the middle keys

Page 41: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Example: 2-3-4 Tree into Red-Black Tree

8 13 17

22 25 27 1 6 11 15

Page 42: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

13

17

1511

25

22

8

1

6 27

Example: 2-3-4 Tree into Red-Black Tree

Colors can be moved from the links to the nodes pointed by these links

Page 43: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Red-Black Tree

13

17

1511

25

22

8

1

6 27

Page 44: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Red-Black Trees

• A red-black tree is a binary search tree with one extra bit of storage per node: its color, which can be either RED or BLACK.

• By constraining the node colors on any simple path from the root to a leaf, red-black trees ensure that no such path is more than twice as long as any other, so that the tree is approximately balanced.

Page 45: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Red-black Tree Properties

1. Every node is either red or black.2. The root is black.3. T.nil is black.4. If a node is red, then both its children are black.

(Hence no two reds in a row on a simple path from the root to a leaf.)

5. For each node, all paths from the node to descendant leaves contain the same number of black nodes.

Page 46: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Heights of Red-Black Trees

• Height of a node is the number of edges in a longest path to a leaf.

• Black-height of a node x: bh(x) is the number of black nodes (including T.nil) on the path from x to leaf, not counting x. By property 5, black-height is well defined.

Page 47: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Height of Red-Black Trees

• Theorem• A red-black tree with n internal nodes has height

h <= 2 lg (n+1).

• Proof (in extenso see [CLRS] – chap 13.1) – This theorem can be proven by proving first following 2 claims:

• Any node with height h has black-height bh >= h/2

• The subtree rooted at any node x contains at least 2^bh(x)- 1 internal nodes.

Page 48: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Insert in Red-Black Trees

1. Insert node z into the tree T as if it were an ordinary binary search tree

2. Color z red.

3. To guarantee that the red-black properties are preserved, we then recolor nodes and perform rotations.

– The only RB properties that might be violated are:• property 2, which requires the root to be black. This

property is violated if z is the root• property 4, which says that a red node cannot have a red

child. This property is violated if z’s parent is red.

Page 49: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Example: RB-INSERT

13

17

1511

25

22

8

1

6 27

7

Page 50: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Example: RB-INSERT

13

17

1511

25

22

8

6

7 271

Page 51: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

AVL vs RB

AVL RB

Max Height 1.44 log n 2 log n

INSERT O(log n) O(log(n)

Rotations at Insert O(1) O(1)

DELETE O(log n) O(log n)

Rotations at Delete

O(log n) O(1)

Used in collection libraries

Java’s TreeSet, TreeMap

C++ STL std::map

Page 52: Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.

Conclusions - Binary Search Trees

• BST are well suited to implement Dictionary and Dynamic Sets structures (Insert, Delete, Search)

• In order to keep their height small, balancing techniques can be applied


Recommended