Title: Balanced Trees
1Balanced Trees
- There are several ways to define balance
- Examples
- Force the subtrees of each node to have almost
equal heights - Place upper and lower bounds on the heights of
the subtrees of each node. - Force the subtrees of each node to have similar
sizes (number of nodes)
2AVL Trees
- AVL tree
- A binary search tree
- with the property
- for every node, the heights of the left and right
subtrees differ at most by one. - Implementation issues
- Each node contains a value (-1, 1, 0) indicating
which subtree is "heavier" - Insert and Delete are modified. They restructure
the tree to make it balanced (if necessary).
3AVL trees
1
nodes are marked with balance value
1
-1
0
1
0
0
4AVL trees Fixing imbalances
- An imbalance is detected when the height
difference between two subtrees of a node becomes
greater than 1 or smaller than -1. - There are two types of imbalances
or
or
TYPE 1
TYPE 2
5AVL trees Fixing imbalances
- Fixing an imbalance is done by rotating the tree.
- There are two types of rotation
- single rotation
- for TYPE 1 imbalances
- double rotation
- for TYPE 2 imbalances
- consists of two single rotations.
- The rotations must always preserve the BST
property.
6AVL Trees single rotation
node with imbalance
6
D
4
4
right rotate at node 6
C
6
2
2
A
B
C
D
B
A
This is a single right rotation. A single left
rotation is symmetric.
7AVL Trees Double rotation
node with imbalance
node with imbalance
6
6
4
D
D
4
2
6
2
STEP2 right rotate at node 6
C
A
A
B
C
D
2
4
B
A
C
B
STEP 1 left rotate at node 2
8AVL Trees Double rotation
If you want to do it in one step, imagine taking
4 and moving it up in between 2 and 6, so that 2
and 6 become its new children
node with imbalance
6
4
D
2
6
2
A
4
A
B
C
D
C
B
B and C will then be adopted by 2 and 6
respectively, in order to maintain the BST
property.
9AVL Trees Insert
- Insert the node as in a BST
- Starting at the newly inserted node, travel up
the tree (towards the root), updating the
balances along the way. - If the tree becomes unbalanced, decide which
rotation needs to be performed, rotate the tree
and update the balances.
10AVL Trees Delete
- Delete the node as in a BST
- Starting at the newly inserted node, travel up
the tree (towards the root), updating the
balances along the way. - If the tree becomes unbalanced, decide which
rotation needs to be performed, rotate the tree
and update the balances. - Keep traveling towards the root, checking the
balances. You may need to rotate again.
11AVL Trees Insert/Delete
- Insert
- maximum possible number of rotations 1
- Delete
- maximum possible number of rotations lgn
- Worst case times
- search O(lgn)
- insert O(lgn)
- delete O(lgn)
- one rotation O(1)
12AVL Trees Efficiency
- It can be shown that the worst case height of an
AVL tree is at most 44 larger than the minimum
possible for a BST (i.e. approximately 1.44lgn)
13Other balanced trees
- Red-black trees
- Each node has an extra bit to hold a color
- The tree stays balanced by placing restrictions
on the way the nodes are colored - Every path from the root to a leaf has the same
number of black nodes and there cannot be
consecutive red nodes. - A red-black tree is balanced when the longest
path from the root to a leaf is at most twice the
length of the shortest path from the root to a
leaf. - A red-black tree with n nodes has height at most
2lg(n1)
14Other balanced trees
- a-balanced trees
- a is a constant between 1/2 and 1
- A tree is a-balanced if, for every node
xsizeleft(x) ? asizexsizeright(x) ?
asizex