0% found this document useful (0 votes)
74 views48 pages

CSE 373: Data Structures and Algorithms: Lecture 10: AVL Trees

This document summarizes a lecture on AVL trees. It discusses binary search trees and how inserting values in order can result in inefficient tree structures. It then introduces AVL trees, which are self-balancing binary search trees that ensure the height difference between any node's left and right subtrees is no more than 1. This balance condition allows AVL trees to perform insertions, deletions, and searches in O(log n) time. The document explains the four cases for rebalancing an AVL tree after an insertion and provides examples of the left-left and right-right rotation cases.

Uploaded by

Manav Makwana
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
74 views48 pages

CSE 373: Data Structures and Algorithms: Lecture 10: AVL Trees

This document summarizes a lecture on AVL trees. It discusses binary search trees and how inserting values in order can result in inefficient tree structures. It then introduces AVL trees, which are self-balancing binary search trees that ensure the height difference between any node's left and right subtrees is no more than 1. This balance condition allows AVL trees to perform insertions, deletions, and searches in O(log n) time. The document explains the four cases for rebalancing an AVL tree after an insertion and provides examples of the left-left and right-right rotation cases.

Uploaded by

Manav Makwana
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 48

CSE 373: Data Structures and Algorithms

Lecture 10: AVL Trees

Instructor: Lilian de Greef


Quarter: Summer 2017
Today
• Announcements
• BSTs continued (this time, bringing
• buildTree
• Balance Conditions
• AVL Trees
• Tree rotations
Announcements
• Reminder: homework 3 due Friday
• Homework 2 grades should come out today
• Section
• Will especially go over material from today (it’s especially tricky)
• TAs can go over some of the tougher hw2 questions in section if you want/ask
Back to Binary Search Trees
buildTree for BST
Let’s consider buildTree (insert values starting from an empty tree)

Insert values 1, 2, 3, 4, 5, 6, 7, 8, 9 into an empty BST

• If inserted in given order,


what is the tree?

• What big-O runtime for


buildTree on this sorted input?

• Is inserting in the reverse order any better?


buildTree for BST
Insert values 1, 2, 3, 4, 5, 6, 7, 8, 9 into an empty BST
What we if could somehow re-arrange them
• median first, then left median, right median, etc.
5, 3, 7, 2, 1, 4, 8, 6, 9

• What tree does that give us?

• What big-O runtime?


Balancing Binary Search Trees
BST: Efficiency of Operations?
Problem:

Worst-case running time:


• find, insert, delete

• buildTree
How can we make a BST efficient?
Observation

Solution: Require a Balance Condition that

• When we build the tree, make sure it’s balanced.


• BUT…Balancing a tree only at build time is insufficient.
• We also need to also keep the tree balanced as we perform operations.
Potential Balance Conditions
• Left and right subtrees

• Left and right subtrees


Potential Balance Conditions
• Left and right subtrees

• Left and right subtrees


Potential Balance Conditions
Left and right subtrees
AVL Tree (Bonus material: etymology)
Invented by Georgy Adelson-Velsky and Evgenii Landis in 1962
The AVL Tree Data Structure
An AVL tree is a self-balancing binary search tree.

Structural properties
1. Binary tree property (same as BST)
2. Order property (same as for BST)

3. Balance condition:
balance of every node is between -1 and 1

where balance(node) = height(node.left) – height(node.right)

Result: Worst-case depth is


Example #1: Is this an AVL Tree?
Balance Condition:
balance of every node is between -1 and 1 6

where balance(node) =
height(node.left) – height(node.right)
4 8

1 7 11

10 12
Example #2: Is this an AVL Tree?
6
Balance Condition:
balance of every node is between -1 and 1
where balance(node) =
height(node.left) – height(node.right) 4 8

1 5 7 11

2
AVL Trees
Good News:
Because height of AVL tree is O(log(n)), then find

But as we insert and delete elements, we need to:


AVL Trees
3
10

2 2
5 20

0 1 1 0
2 9 15 30

0 0
7 17
AVL tree operations
• AVL find:
• Same as usual BST find

• AVL insert:

• AVL delete:
• The “easy way” is lazy deletion
• Otherwise, do the deletion and then check for several imbalance cases (we will skip
this)
First insert example
Insert(6)
Insert(3)
Insert(1)

Third insertion

What’s the only way to fix it?


Fix: Apply “Single Rotation”
• Single rotation: The basic operation we’ll use to rebalance
• Move child of unbalanced node into parent position
• Parent becomes the “other” child (always okay in a BST!)
• Other subtrees move in only way BST allows (we’ll see in generalized example)

AVL Property 3
6
violated at node 6

3
1 6

1
Tree Rotations: Generalized
Generalizing our examples…

12

5 23

2 9 18 30

1 4 7 10
Generalizing our examples…

12

5 23

2 9 18 30

1 4 7 10
Generalizing our examples…

12

A C
Generalizing our examples…

12
d

A C
Generalized Single Rotation

A C
Generalized Single Rotation

C E
Single Rotations

(Figures by Melissa O’Neill, reprinted with her permission to Lilian)


AVL Tree insert (more specific):
1. Insert the new node as in our generic BST (a new leaf)

2. For each node on the path from the root to the new leaf, the
insertion may (or may not) have changed the node’s height

3. So after insertion in a subtree,


Case #1:
d

E
A C
a’

(Figures by Melissa O’Neill, reprinted with her permission to Lilian)


Example #2 for left-left case: insert(16)

15

8 22

4 10 19 24

3 6 17 20

16
Case #2:

(Figures by Melissa O’Neill, reprinted with her permission to Lilian)


Example for right-right case: insert(26)

15
15

8 24
8 22

24 4 10 22 25
4 10 19

3 6 3 6 19 23
23 25 26

26
Case #3:

(Figures by Melissa O’Neill, reprinted with her permission to Lilian)


A Better Look at Case #3:

(Figures by Melissa O’Neill, reprinted with her permission to Lilian)


Case #3: Right-Left Case (after one rotation)

right rotate

A way to remember it:


Move d to grandparent’s position. Put everything else in their only legal positions for a BST.

(Figures by Melissa O’Neill, reprinted with her permission to Lilian)


Practice time! Example of Case #4

Starting with this 60 Which of the following


AVL tree: is the updated AVL tree
30 80 after inserting 42?

10 50

A) 42 B) 30 C) 50 D) 50

30 60 10 50 30 60 30 60

10 50 80 42 60 80 10 42 80 10 42 80
(Extra space for your scratch-work)
Practice time! Example of Case #4

Starting with this 60 Which of the following


AVL tree: is the updated AVL tree
30 80 after inserting 42?

10 50

What’s the name of this case? What rotations did we do?


Insert, summarized
• Insert as in our generic BST
• Check back up path for imbalance, which will be 1 of 4 cases:
• Node’s left-left grandchild is too tall
• Node’s left-right grandchild is too tall
• Node’s right-left grandchild is too tall
• Node’s right-right grandchild is too tall

• Only occurs because


• After the appropriate single or double rotation, the smallest-unbalanced subtree
has the same height as before the insertion
• So all ancestors are now balanced

41
AVL Tree Efficiency

• Worst-case complexity of find:

• Worst-case complexity of insert:

• Worst-case complexity of buildTree:

Takes some more rotation action to handle delete…


Pros and Cons of AVL Trees
Arguments for AVL trees:

1. All operations logarithmic worst-case because trees are always balanced


2. Height balancing adds no more than a constant factor to the speed of
insert and delete

Arguments against AVL trees:

1. Difficult to program & debug [but done once in a library!]


2. More space for height field
3. Asymptotically faster but rebalancing takes a little time
4. If amortized logarithmic time is enough, use splay trees (also in the text,
not covered in this class)
AVL Tree Rotation Cheat-Sheet
(Just two of the four cases)
Single Rotations

(Figures by Melissa O’Neill, reprinted with her permission to Lilian)


Case #2: Left-Left Case

left rotate

(Figures by Melissa O’Neill, reprinted with her permission to Lilian)


Case #3: Right-Left Case (after two rotations)

left rotate

right rotate

A way to remember it:


Move d to grandparent’s position. Put everything else in their only legal positions for a BST.

(Figures by Melissa O’Neill, reprinted with her permission to Lilian)

You might also like