cmsc 341 leftist heapschang/cs341.f17/baroutis... leftist heap concepts •structurally, a leftist...
TRANSCRIPT
![Page 1: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/1.jpg)
www.umbc.edu
CMSC 341 Leftist Heaps
Based on slides from previous iterations of this course
![Page 2: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/2.jpg)
www.umbc.edu
Today’s Topics
• Review of Min Heaps
• Introduction of Left-ist Heaps
• Merge Operation
• Heap Operations
![Page 3: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/3.jpg)
www.umbc.edu
Review of Heaps
![Page 4: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/4.jpg)
www.umbc.edu
Min Binary Heap • A min binary heap is a…
– Complete binary tree
– Neither child is smaller than the value in the parent
– Both children are at leastas large as the parent
• In other words,smaller items goabove larger ones
![Page 5: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/5.jpg)
www.umbc.edu
Min Binary Heap Performance
• Performance
– (n is the number of elements in the heap)
• construction O( n )
• findMin() O( 1 )
• insert() O( lg n )
• deleteMin() O( lg n )
![Page 6: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/6.jpg)
www.umbc.edu
Introduction to Leftist Heaps
![Page 7: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/7.jpg)
www.umbc.edu
Leftist Heap Concepts • Structurally, a leftist heap is a min tree where
each node is marked with a rank value.
• Uses a Binary Tree (BT)!!
• Merging heaps is much easier and faster
– May use already established links to merge with anew node
– Rather than copying pieces of an array
![Page 8: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/8.jpg)
www.umbc.edu
Leftist Heap Concepts • Values STILL obey a heap order (partial order)
• Uses a null path length to maintain the structure (covered in detail later)
– The null path of a node’sleft child is >= null path of the right child
• At every node, the shortest path to a non-full node is along the rightmost path!!!
![Page 9: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/9.jpg)
www.umbc.edu
Leftist Heap Example
• A leftist heap, then, is apurposefullyunbalanced binary tree(leaning to the left,hence the name) thatkeeps its smallest valueat the top and has aninexpensive mergeoperation
2
4 3
6 8 5
9 6 8
![Page 10: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/10.jpg)
www.umbc.edu
Leftist Heap Performance
• Leftist Heaps support: = O(1)
– deleteMin() = O(log n)
= O(log n)
= O(n)
– findMin()
– insert()
– construct
– merge() = O(log n)
![Page 11: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/11.jpg)
www.umbc.edu
Null Path Length (npl)
• Length of shortest path from current node (X)to a node without 2 children
– value is stored IN the node itself
• leafs
– npl = 0
• nodes with only 1 child
– npl = 0
![Page 12: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/12.jpg)
www.umbc.edu
Null Path Length (npl) Calculation
2
4 3
6 8 5
9 6 8
To calculate the npl for each
node, we look to see how many
nodes we need to traverse to get
to an open node
![Page 13: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/13.jpg)
www.umbc.edu
Null Path Length (npl) Calculation
2
4 3
6 8 5
9 6 8
0 / 0 0 / 0 0 / 0
0 / 0
In the leaves case,
there is a null
position 0 nodes
away
![Page 14: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/14.jpg)
www.umbc.edu
Null Path Length (npl) Calculation
2
4 3
6 8 5
9 6 8
0 / 1
In these cases, one
side is 0 and the
other side is 1 0 / 1
![Page 15: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/15.jpg)
www.umbc.edu
Null Path Length (npl) Calculation
2
4 3
6 8 5
9 6 8
2 / 1
1 / 1
2 / 1 In the root, it will take
two levels to get to
null to the left; one to
the right.
![Page 16: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/16.jpg)
www.umbc.edu
Leftist Node
• The node for a leftist heap will have manymember variables this time
– links (left and right)
– element (data)
– npl
• By default, the Leftist Heap sets an emptynode as the root
![Page 17: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/17.jpg)
www.umbc.edu
Leftist Node Code
private:
struct LeftistNode
{
Comparable element;
LeftistNode *left;
LeftistNode *right;
int npl;
LeftistNode( const Comparable & theElement, LeftistNode *lt = NULL,
LeftistNode *rt = NULL, int np = 0 )
: element( theElement ), left( lt ), right( rt ), npl( np ) { }
};
LeftistNode *root;
Looks like a binary
tree node except the
npl being stored.
![Page 18: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/18.jpg)
www.umbc.edu
Building a Leftist Heap
![Page 19: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/19.jpg)
www.umbc.edu
Building a Leftist Heap
• Value of node STILL matters
– Lowest value will be root, so still a min Heap
• Data entered is random
• Uses CURRENT npl of a node to determinewhere the next node will be placed
![Page 20: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/20.jpg)
www.umbc.edu
Moves in Building Leftist Heap
50
New leftist heap with
one node
![Page 21: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/21.jpg)
www.umbc.edu
Moves in Building Leftist Heap
50
Normal insertion of a
new node into the
tree value 75.
75 First placed as far right
as possible.
Then swung left to
satisfy npls.
![Page 22: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/22.jpg)
www.umbc.edu
Moves in Building Leftist Heap
50
Normal insertion of a
new node into the
tree value 25.
75 As this is a min Tree,
25 is the new root.
Then swung left to
satisfy npls.
25
![Page 23: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/23.jpg)
www.umbc.edu
Moves in Building Leftist Heap
50
Normal insertion of a
new node into the
tree value 55.
75 No swing required.
25
55
![Page 24: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/24.jpg)
www.umbc.edu
Moves in Building Leftist Heap
50
Normal insertion of a
new node into the
tree value 40.
75
25
55
40
What is wrong with this?
Not a min heap at
this point. Need to
swap 40 and 55 and
swing.
![Page 25: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/25.jpg)
www.umbc.edu
Moves in Building Leftist Heap
50
Normal insertion of a
new node into the
tree value 40.
75
25
55
40
Not a min heap at
this point. Need to
swap 40 and 55 and
swing.
![Page 26: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/26.jpg)
www.umbc.edu
Moves in Building Leftist Heap
50
Normal insertion of a
new node into the
tree value 65.
75
25
55
40
While this is still a
min heap, the npl at
the root is not leftist
65
1/2
![Page 27: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/27.jpg)
www.umbc.edu
Moves in Building Leftist Heap
50
We need change this
from 1/2 to 2/1 so
that it remains leftist.
75
25
55
40
To do this, we switch
the left and the right
subtrees.
65
2/1
After we do the swap,
the npl of the root is
compliant.
![Page 28: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/28.jpg)
www.umbc.edu
Leftist Heap Algorithm • Add new node to right-side of tree, in order• If new node is to be inserted as a parent (parent < children)
– make new node parent– link children to it– link grandparent down to new node (now new parent)
• If leaf, attach to right of parent• If no left sibling, push to left (hence left-ist)
– why?? (answer in a second)• Else left node is present, leave at right child• Update all ancestors’ npls• Check each time that all nodes left npl > = right npls
– if not, swap children or node where this condition exists
![Page 29: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/29.jpg)
www.umbc.edu
Building a Leftist Heap Example 21, 14, 17, 10, 3, 23,
26, 8
21
![Page 30: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/30.jpg)
www.umbc.edu
Building a Leftist Heap Example 21, 14, 17, 10, 3, 23,
26, 8
14
21 Insert 14 as the new root
![Page 31: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/31.jpg)
www.umbc.edu
Building a Leftist Heap Example 21, 14, 17, 10, 3, 23,
26, 8
14
21 17 Insert 17 as the right
child of 14
![Page 32: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/32.jpg)
www.umbc.edu
Building a Leftist Heap Example 21, 14, 17, 10, 3, 23,
26, 8
14
21 17
10
Insert 10 as the new root
![Page 33: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/33.jpg)
www.umbc.edu
Building a Leftist Heap Example 21, 14, 17, 10, 3, 23,
26, 8
14
21 17
10
3
Insert 3 as the new root
![Page 34: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/34.jpg)
www.umbc.edu
Building a Leftist Heap Example 21, 14, 17, 10, 3, 23,
26, 8
14
21 17
10
3
23
Insert 23 as the right
child of 3
![Page 35: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/35.jpg)
www.umbc.edu
Building a Leftist Heap Example 21, 14, 17, 10, 3, 23,
26, 8
14
21 17
10
3
26
23
Insert 26 as the right
child of 23
Swing 26 to the left
![Page 36: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/36.jpg)
www.umbc.edu
Building a Leftist Heap Example 21, 14, 17, 10, 3, 23,
26, 8
14
21 17
10
3
23
26
8
Take the right subtree of
root 3: nodes 23 & 26
Insert 8 as the new root
(parent of 23)
Reattach to original root
![Page 37: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/37.jpg)
www.umbc.edu
Merging Leftist Heaps
![Page 38: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/38.jpg)
www.umbc.edu
Merging Leftist Heaps
• In the code, adding a single node is treated as merging a heap (just one node) with an established heap’s root
– And work from that root as we just went over
• We will go over merging whole heaps momentarily
• But in reality, isn’t ONE node a heap??
![Page 39: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/39.jpg)
www.umbc.edu
Merging Leftist Heaps
• The heaps we are about to merge must be LEFTIST heaps
• At the end we will get a heap that is both
– a min-heap
– leftist
![Page 40: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/40.jpg)
www.umbc.edu
Merging Leftist Heaps
• The Merge procedure takes two leftist trees, A and B, and returns a leftist tree that contains the union of the elements of A and B. In a program, a leftist tree is represented by a pointer to its root.
![Page 41: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/41.jpg)
www.umbc.edu
Merging Leftist Heaps Example
10
50
15
5
1
20 25
7
99
75
22
2
1
0 0
0 0
0
0
0
1
1
Where should we
attempt to merge?
![Page 42: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/42.jpg)
www.umbc.edu
Merging Leftist Heaps Example
50
20 25
7
99
75
22
In the right sub-tree
![Page 43: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/43.jpg)
www.umbc.edu
Merging Leftist Heaps Example
25 75
22
All the way down to
the right most node
![Page 44: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/44.jpg)
www.umbc.edu
Merging Leftist Heaps Example
25 75
22
As there are two
nodes in the right
subtree, swap.
Important: We don’t “split”
a heap, so 22 must be
the parent in this merge
![Page 45: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/45.jpg)
www.umbc.edu
Merging Leftist Heaps Example
25 75
22
Merge two subtrees
![Page 46: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/46.jpg)
www.umbc.edu
Merging Leftist Heaps Example
50
20
7
99
Next level of the tree
25 75
22
![Page 47: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/47.jpg)
www.umbc.edu
Merging Leftist Heaps Example
50
20
7
99 25 75
22
Right side of the tree
has a npl of 2 so we
need to swap
10
5
1
15
2 1
![Page 48: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/48.jpg)
www.umbc.edu
Merging Leftist Heaps Example
50
20
7
99 25 75
22
Now the highest npl
is on the left.
10
5
1
15
2 1
2
![Page 49: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/49.jpg)
www.umbc.edu
Merging Leftist Heaps – Start at the (sub) root, and finalize the node AND
LEFT with the smallest value
– REPEADLY, until no lists left unmerged.
• Start at the rightmost root of the sub-tree, and finalize the node AND LEFT with the next smallest value in leftist lists.
• Add to RIGHT of finalized tree.
– Verify that it is a Min Heap!! (Parent < Children)
– Verify a leftist heap! (left npl >= right npl)
• if not, swap troubled node with sibling
![Page 50: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/50.jpg)
www.umbc.edu
Merging Leftist Heaps Code
/**
* Merge rhs into the priority queue.
* rhs becomes empty. rhs must be different from this.
*/
void merge( LeftistHeap & rhs )
{
if( this == &rhs ) // Avoid aliasing problems
return;
root = merge( root, rhs.root );
rhs.root = NULL;
}
![Page 51: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/51.jpg)
www.umbc.edu
Merging Leftist Heaps Code
/**
* Internal method to merge two roots.
* Deals with deviant cases and calls recursive merge1.
*/
LeftistNode * merge( LeftistNode *h1, LeftistNode *h2 )
{
if( h1 == NULL )
return h2;
if( h2 == NULL )
return h1;
if( h1->element < h2->element )
return merge1( h1, h2 );
else
return merge1( h2, h1 );
}
![Page 52: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/52.jpg)
www.umbc.edu
Merging Leftist Heaps Code
/**
* Internal method to merge two roots.
* Assumes trees are not empty, & h1's root contains smallest item.
*/
LeftistNode * merge1( LeftistNode *h1, LeftistNode *h2 )
{
if( h1->left == NULL ) // Single node
h1->left = h2; // Other fields in h1 already accurate
else
{
h1->right = merge( h1->right, h2 );
if( h1->left->npl < h1->right->npl )
swapChildren( h1 );
h1->npl = h1->right->npl + 1;
}
return h1;
}
![Page 53: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/53.jpg)
www.umbc.edu
Deleting from Leftist Heap
![Page 54: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/54.jpg)
www.umbc.edu
Deleting from Leftist Heap
• Simple to just remove a node (since at top)
– this will make two trees
• Merge the two trees like we just did
![Page 55: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/55.jpg)
www.umbc.edu
Deleting from Leftist Heap
14 23
8
3
21 17
10
26
2
1 1
0 0 0 0
0
We remove the root.
![Page 56: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/56.jpg)
www.umbc.edu
Deleting from Leftist Heap
14 23
8
3
21 17
10
26
2
1 1
0 0 0 0
0
Then we do a merge
and because min is
in left subtree, we
recursively merge
right into left
![Page 57: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/57.jpg)
www.umbc.edu
Deleting from Leftist Heap
14 23
8
3
21 17
10
26
2
1 1
0 0 0 0
0
Then we do a merge
and because min is
in left subtree, we
recursively merge
right into left
![Page 58: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/58.jpg)
www.umbc.edu
Deleting from Leftist Heap
10 14
8
21 23
17 26
1
1
1 0
0 0
0
After Merge
![Page 59: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/59.jpg)
www.umbc.edu
Leftist Heaps
• Merge with two trees of size n – O(log n), we are not creating a totally new tree!! – some was used as the LEFT side!
• Inserting into a left-ist heap – O(log n) – same as before with a regular heap
• deleteMin with heap size n – O(log n) – remove and return root (minimum value) – merge left and right subtrees
![Page 60: CMSC 341 Leftist Heapschang/cs341.f17/baroutis... Leftist Heap Concepts •Structurally, a leftist heap is a min tree where each node is marked with a rank value. •Uses a Binary](https://reader034.vdocument.in/reader034/viewer/2022042211/5eb0d279030eb07467682935/html5/thumbnails/60.jpg)
www.umbc.edu
Announcements
• Project 3
– Due Tuesday, November 7th at 8:59:59 PM