You are on page 1of 52

Leftist Heaps

Text
Read Weiss, 23.1 (Skew Heaps) Definition of null path length Definition of leftist heap Sequence of inserts Re-heapification if leftist heap property is violated

Leftist Heap

Building a Leftist Heap

Motivation
A binary heap provides O(log n) inserts and O(log n) deletes but suffers from O(n log n) merges A leftist heap offers O(log n) inserts and O(log n) deletes and O(log n) merges Note, however, leftist heap inserts and deletes are more expensive than Binary Heap inserts and deletes

Definition
A Leftist (min)Heap is a binary tree that satisfies the following conditions. If X is a node and L and R are its left and right children, then:
1. X.value L.value 2. X.value R.value 3. null path length of L null path length of R

where the null path length of a node is the shortest distance between from that node to a descendant with 0 or 1 child. If a node is null, its null path length is 1.

Example: Null Path Length


4
8 12 27 19 20

15
node npl 4 1

25
8 0 19 1 12 1

43
15 0 25 0 27 0 20 0 43 0

Example: Null Path Length


4
8 12
1 0 What is the npl of the right child of 8?

19
0

27

20

15

0 4 1

25
8 0

0 19 1 12 1

43
15 0

What are the npls of the children of 20 and the right child of 27? 27 0 20 0 43 0

node npl

25 0

Example: Null Path Length


4
8 12
1 0
node 4 violates leftist heap property fix by swapping children

19 27
0

20

15

0 4 1

25
8 0

0 19 1 12 1

43
15 0

0 27 0 20 0 43 0

node npl

25 0

Leftist Heap
4
19 27
0 1

8 20
0

12

43
npl

0 4 1 8 0 19 1 12 1

15
15 0

0 25 0 27 0

25
20 0

0 43 0

node

Merging Leftist Heaps


Consider two leftist heaps
4 19 27 43 20 15 8 8 14 25 6 7

12

Task: merge them into a single leftist heap

Merging Leftist Heaps


4
19 27 20 15 12 25 8 14 8

6
7

43

First, instantiate a Stack

Merging Leftist Heaps


x
4
19 27 20 15 12 25 8 14 8

y
6
7

43

Compare root nodes


merge(x,y)

Merging Leftist Heaps


x
4
19 27 20 15 12 25 8 14 8

y
6
7

43

Remember smaller value

Merging Leftist Heaps


y
4
19 27 20 15 12 25 8 14

x
8

6
7

43

Repeat the process with the right child of the smaller value

Merging Leftist Heaps


y
4
19 27 20 15 12 25 8 14

x
8

6
7

43

6 4

Remember smaller value

Merging Leftist Heaps


4
19 27 20 15 12 25 8 14

x
8

6
7

43

6 4

Repeat the process with the right child of the smaller value

Merging Leftist Heaps


4
19 27 20 15 12 25 8 14

x
8

6
7

43

7 6 4

Remember smaller value

Merging Leftist Heaps


4
19 27 20 15 12 25 8 14

x
8

6
7

y null 7 6 4

43

Repeat the process with the right child of the smaller value

Merging Leftist Heaps


4
19 27 20 15 12 25 8 14

x
8

6
7

43

7 6 4

Because one of the arguments is null, return the other argument

Merging Leftist Heaps


4
19 27 20

Refers to node 8
14

7 8 12 15 25

43

8 7 6 4

Make 8 the right child of 7

Merging Leftist Heaps


4
19 27 20

Refers to node 8
14

8 8 12 15 25

43

8 7 6 4

Make 7 leftist (by swapping children)

Merging Leftist Heaps


4
19 27 20

Refers to node 8
14

8 8 12 15 25

43

6 4

Return node 7

Merging Leftist Heaps


4
19 27 20

Refers to node 8
14

8 8 12 15 25

43

6 4

Make 7 the right child of 6 (which it already is)

Merging Leftist Heaps


4
19 27 20

Refers to node 8
14

8 8 12 15 25

43

6 4

Make 6 leftist (it already is)

Merging Leftist Heaps


4
19 27 20

Refers to node 8
14

8 8 12 15 25

43

Return node 6

Merging Leftist Heaps


4
19 27 20 14 12 15 25 8 8 6 7

43

Make 6 the right child of 4

Merging Leftist Heaps


4
19 27 20 14 12 15 25 8 8 6 7

43

Make 4 leftist (it already is)

Final Leftist Heap


4
19 27 20 14 12 15 25 8 8 6 7

43

Verify that the tree is heap


Verify that the heap is leftist
4

Return node 4

Analysis
Height of a leftist heap O(log n) Maximum number of values stored in Stack 2 * O(log n) O(log n) Total cost of merge O(log n)

Inserts and Deletes


To insert a node into a leftist heap, merge the leftist heap with the node After deleting root X from a leftist heap, merge its left and right subheaps In summary, there is only one operation, a merge.

Skew Heaps
Text
Read Weiss, 6.7 No need for null path length Definition of skew heap Sequence of inserts Swap children at every merge step

Skew Heap

Building a Skew Heap

Motivation
Simplify leftist heap by not maintaining null path lengths swapping children at every merge step

Definition
A Skew (min)Heap is a binary tree that satisfies the following conditions. If X is a node and L and R are its left and right children, then:
1. 2. X.value L.value X.value R.value

A Skew (max)Heap is a binary tree that satisfies the following conditions. If X is a node and L and R are its left and right children, then:
1. 2. X.value L.value X.value R.value

Merging Skew Heaps


Consider two skew heaps
4 19 27 43 20 15 8 8 14 25 6 7

12

Task: merge them into a single skew heap

Merging Skew Heaps


4
19 27 20 15 12 25 8 14 8

6
7

43

First, instantiate a Stack

Merging Skew Heaps


x
4
19 27 20 15 12 25 8 14 8

y
6
7

43

Compare root nodes


merge(x,y)

Merging Skew Heaps


x
4
19 27 20 15 12 25 8 14 8

y
6
7

43

Remember smaller value

Merging Skew Heaps


y
4
19 27 20 15 12 25 8 14

x
8

6
7

43

Repeat the process with the right child of the smaller value

Merging Skew Heaps


y
4
19 27 20 15 12 25 8 14

x
8

6
7

43

6 4

Remember smaller value

Merging Skew Heaps


4
19 27 20 15 12 25 8 14

x
8

6
7

43

6 4

Repeat the process with the right child of the smaller value

Merging Skew Heaps


4
19 27 20 15 12 25 8 14

x
8

6
7

43

7 6 4

Remember smaller value

Merging Skew Heaps


4
19 27 20 15 12 25 8 14

x
8

6
7

y null 7 6 4

43

Repeat the process with the right child of the smaller value

Merging Skew Heaps


4
19 27 20 15 12 25 8 14

x
8

6
7

43

7 6 4

Because one of the arguments is null, return the other argument

Merging Skew Heaps


4
19 27 20

Refers to node 8
14

7 8 12 15 25

43

8 7 6 4

Make 8 the right child of 7

Merging Skew Heaps


4
19 27 20

Refers to node 8
14

8 8 12 15 25

43

8 7 6 4

Swap children of node 7

Merging Skew Heaps


4
19 27 20

Refers to node 8
14

8 8 12 15 25

43

6 4

Return node 7

Merging Skew Heaps


4
19 27 20

Refers to node 8
14

8 8 12 15 25

43

6 4

Make 7 the right child of 6 (which it already is)

Merging Skew Heaps


4
19 27 20 12 15 25

Refers to node 8
8

7 14

43

6 4

Swap children of node 6

Merging Skew Heaps


4
19 27 20 12 15 25

Refers to node 8
8

7 14

43

Return node 6

Merging Skew Heaps


4
19 27 20 8 12 15 25 7 14

6 8

43

Make 6 the right child of 4

Merging Skew Heaps


4 6
7 8 12 15 25 14 19

8
43

27

20

Swap children of node 4

Final Skew Heap


4 6
7 8 12 15 25 14 19

8
43

27

20

Verify that the tree is heap


Verify that the heap is skew
4

Return node 4

Analysis
Height of a skew heap O(log n) Maximum number of values stored in Stack 2 * O(log n) O(log n) Total cost of merge O(log n)

Inserts and Deletes


To insert a node into a skew heap, merge the leftist heap with the node After deleting root X from a skew heap, merge its left and right subheaps In summary, there is only one operation, a merge.

You might also like