An AVL tree is a self-balancing binary search tree that guarantees search, insertion, and deletion operations will take O(log n) time on average. It achieves this by ensuring the heights of the left and right subtrees of every node differ by at most one. When an insertion or deletion causes a height imbalance of two, rotations are performed to rebalance the tree.
Balanced binary tree
●The disadvantage of a binary search tree is that its height can
be as large as N-1
● This means that the time needed to perform insertion and
deletion and many other operations can be O(N) in the worst
case
● We want a tree with small height
● A binary tree with N node has height at least (log N)
● Thus, our goal is to keep the height of a binary search tree
O(log N)
● Such trees are called balanced binary search trees. Examples
are AVL tree, red-black tree.
3.
Binary Search Tree- Best Time
● All BST operations are O(h), where d is tree
depth
● minimum d is for a binary tree
with N nodes
■ What is the best case tree?
■ What is the worst case tree?
● So, best case running time of BST operations
is O(log N)
2h log N
4.
Binary Search Tree- Worst Time
● Worst case running time is O(N)
■ What happens when you Insert elements in
ascending order?
○ Insert: 2, 4, 6, 8, 10, 12 into an empty BST
■ Problem: Lack of “balance”:
○ compare depths of left and right subtree
■ Unbalanced degenerate tree
Approaches to balancingtrees
● Don't balance
■ May end up with some nodes very deep
● Strict balance
■ The tree must always be balanced perfectly
● Pretty good balance
■ Only allow a little out of balance
● Adjust on access
■ Self-adjusting
7.
Balancing Binary SearchTrees
● Many algorithms exist for keeping binary
search trees balanced
■ Adelson-Velskii and Landis (AVL) trees
(height-balanced trees)
■ Splay trees and other self-adjusting trees
■ B-trees and other multiway search trees
8.
AVL Tree is…
●Named after Adelson-Velskii and Landis
● the first dynamically balanced trees to be
propose
● Binary search tree with balance condition in
which the sub-trees of each node can differ by
at most 1 in their height
9.
Definition of abalanced tree
● Ensure the depth = O(log N)
● Take O(log N) time for searching, insertion,
and deletion
● Every node must have left & right sub-trees of
the same height
10.
An AVL treehas the following
properties:
1. Sub-trees of each
node can differ by
at most 1 in their
height
2. Every sub-trees is
an AVL tree
11.
AVL tree?
YES
Each leftsub-tree has
height 1 greater than each
right sub-tree
NO
Left sub-tree has height 3,
but right sub-tree has height
1
12.
AVL tree
Height ofa node
● The height of a leaf is 1. The height of a null
pointer is zero.
● The height of an internal node is the maximum
height of its children plus 1
Note that this definition of height is different from the one we
defined previously (we defined the height of a leaf as zero
previously).
Height of anAVL Tree
● Fact: The height of an AVL tree storing n keys is O(log n).
● Proof: Let us bound n(h): the minimum number of internal nodes
of an AVL tree of height h.
● We easily see that n(1) = 1 and n(2) = 2
● For n > 2, an AVL tree of height h contains the root node, one AVL
subtree of height n-1 and another of height n-2.
● That is, n(h) = 1 + n(h-1) + n(h-2)
● Knowing n(h-1) > n(h-2), we get n(h) > 2n(h-2). So
n(h) > 2n(h-2), n(h) > 4n(h-4), n(h) > 8n(n-6), … (by induction),
n(h) > 2in(h-2i)
● Solving the base case we get: n(h) > 2 h/2-1
● Taking logarithms: h < 2log n(h) +2
● Thus the height of an AVL tree is O(log n)
3
4 n(1)
n(2)
17.
AVL - Goodbut not Perfect
Balance
● 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
■ Store current heights in each node
18.
Height of anAVL Tree
● N(h) = minimum number of nodes in an AVL
tree of height h.
● Basis
■ N(0) = 1, N(1) = 2
● Induction
■ N(h) = N(h-1) + N(h-2) + 1
● Solution (recall Fibonacci analysis)
■ N(h) > h ( 1.62)
h-1
h-2
h
19.
Height of anAVL Tree
● N(h) > h ( 1.62)
● 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 (relatively well balanced
tree!!)
■ h < 1.44 log2n (i.e., Find takes O(log n))
Key Points
● AVLtree remain balanced by applying
rotations, therefore it guarantees O(log N)
search time in a dynamic environment
● Tree can be re-balanced in at most O(log N)
time
23.
Searching AVL Trees
●Searching an AVL tree is exactly the same as
searching a regular binary tree
■ all descendants to the right of a node are greater
than the node
■ all descendants to the left of a node are less than
the node
24.
Inserting in AVLTree
● Insertion is similar to regular binary tree
■ keep going left (or right) in the tree until a null
child is reached
■ insert a new node in this position
○ an inserted node is always a leaf to start with
● Major difference from binary tree
■ must check if any of the sub-trees in the tree have
become too unbalanced
○ search from inserted node to root looking for any node
with a balance factor of 2
25.
Inserting in AVLTree
● A few points about tree inserts
■ the insert will be done recursively
■ the insert call will return true if the height of the
sub-tree has changed
○ since we are doing an insert, the height of the sub-tree
can only increase
■ if insert() returns true, balance factor of current
node needs to be adjusted
○ balance factor = height(right) – height(left)
left sub-tree increases, balance factor decreases by 1
right sub-tree increases, balance factor increases by 1
■ if balance factor equals 2 for any node, the sub-
tree must be rebalanced
26.
Inserting in AVLTree
M(-1)
insert(V)E(1)
J(0)
P(0)
M(0)
E(1)
J(0)
P(1)
V(0)
M(-1)
insert(L)E(1)
J(0)
P(0)
M(-2)
E(-2)
J(1)
P(0)
L(0)
This tree needs to be fixed!
27.
Re-Balancing a Tree
●To check if a tree needs to be rebalanced
■ start at the parent of the inserted node and journey
up the tree to the root
○ if a node’s balance factor becomes 2 need to do a
rotation in the sub-tree rooted at the node
○ once sub-tree has been re-balanced, guaranteed that the
rest of the tree is balanced as well
can just return false from the insert() method
■ 4 possible cases for re-balancing
○ only 2 of them need to be considered
other 2 are identical but in the opposite direction
28.
Let the nodethat needs rebalancing be .
There are 4 cases:
Outside Cases (require single rotation) :
1. Insertion into left subtree of left child of .
2. Insertion into right subtree of right child of .
Inside Cases (require double rotation) :
3. Insertion into right subtree of left child of .
4. Insertion into left subtree of right child of .
The rebalancing is performed through four separate
rotation algorithms.
Insertions in AVL Trees
5/22/2012
Deletion X inAVL Trees
● Deletion:
■ Case 1: if X is a leaf, delete X
■ Case 2: if X has 1 child, use it to replace X
■ Case 3: if X has 2 children, replace X with its
inorder predecessor (and recursively delete it)
● Rebalancing
5/22/2012
AVL Tree: analysis
●The depth of AVL Trees is at most logarithmic.
● So, all of the operations on AVL trees are also
logarithmic.
● The worst-case height is at most 44 percent
more than the minimum possible for binary
trees.