@@ -28,11 +28,11 @@ class Node:
28
28
"""
29
29
30
30
def __init__ (self , key ) -> None :
31
- self .key = key
31
+ self .key = key or None
32
32
self .degree = 0
33
33
self .marked = False
34
- self .parent = None
35
- self .child = None
34
+ self .parent = Node ( None )
35
+ self .child = Node ( None )
36
36
self .left = self
37
37
self .right = self
38
38
@@ -70,7 +70,7 @@ class FibonacciHeap:
70
70
"""
71
71
72
72
def __init__ (self ) -> None :
73
- self .min_node = None
73
+ self .min_node = Node ( None )
74
74
self .total_nodes = 0
75
75
76
76
def insert (self , key ) -> Node :
@@ -127,7 +127,7 @@ def _insert_into_circular_list(self, base_node, node_to_insert) -> Node:
127
127
>>> node2.left == node1
128
128
True
129
129
"""
130
- if base_node is None :
130
+ if base_node . key is None :
131
131
return node_to_insert
132
132
133
133
node_to_insert .right = base_node .right
@@ -166,7 +166,7 @@ def extract_min(self) -> Node:
166
166
the Fibonacci heap properties after removal of the minimum node.
167
167
"""
168
168
if self .min_node is None :
169
- return None
169
+ return Node ( None )
170
170
171
171
min_node = self .min_node
172
172
@@ -176,7 +176,7 @@ def extract_min(self) -> Node:
176
176
while True :
177
177
next_child = current_child .right
178
178
self ._insert_into_circular_list (self .min_node , current_child )
179
- current_child .parent = None
179
+ current_child .parent . key = None
180
180
if current_child == last_child :
181
181
break
182
182
current_child = next_child
@@ -185,7 +185,7 @@ def extract_min(self) -> Node:
185
185
min_node .right .left = min_node .left
186
186
187
187
if min_node == min_node .right :
188
- self .min_node = None
188
+ self .min_node . key = None
189
189
else :
190
190
self .min_node = min_node .right
191
191
self ._consolidate ()
@@ -212,7 +212,7 @@ def _consolidate(self):
212
212
called directly from outside the class.
213
213
"""
214
214
max_degree = int (self .total_nodes ** 0.5 ) + 1
215
- degree_table = [None ] * max_degree
215
+ degree_table = [Node ( None ) ] * max_degree
216
216
217
217
roots = []
218
218
if self .min_node :
@@ -235,7 +235,7 @@ def _consolidate(self):
235
235
other_root .left .right = other_root .right
236
236
other_root .right .left = other_root .left
237
237
238
- if root_node .child is None :
238
+ if root_node .child . key is None :
239
239
root_node .child = other_root
240
240
other_root .right = other_root
241
241
other_root .left = other_root
@@ -246,15 +246,15 @@ def _consolidate(self):
246
246
root_node .degree += 1
247
247
other_root .marked = False
248
248
249
- degree_table [current_degree ] = None
249
+ degree_table [current_degree ] = Node ( None )
250
250
current_degree += 1
251
251
252
252
degree_table [current_degree ] = root_node
253
253
254
- self .min_node = None
254
+ self .min_node . key = None
255
255
for degree in range (max_degree ):
256
256
if degree_table [degree ] is not None and (
257
- self .min_node is None or (degree_table [degree ]. key < self .min_node .key )
257
+ self .min_node is None or (degree_table [degree ] < self .min_node .key )
258
258
):
259
259
self .min_node = degree_table [degree ]
260
260
@@ -271,7 +271,7 @@ def decrease_key(self, node, new_key):
271
271
272
272
Example:
273
273
>>> heap = FibonacciHeap()
274
- >>> node = heap.insert(5)
274
+ >>> node1 = heap.insert(5)
275
275
>>> heap.decrease_key(node, 3)
276
276
>>> node.key
277
277
3
@@ -289,7 +289,7 @@ def decrease_key(self, node, new_key):
289
289
node .key = new_key
290
290
parent_node = node .parent
291
291
292
- if parent_node is not None and node .key < parent_node .key :
292
+ if parent_node . key is not None and node .key < parent_node .key :
293
293
self ._cut (node , parent_node )
294
294
self ._cascading_cut (parent_node )
295
295
@@ -313,7 +313,7 @@ def _cut(self, child_node, parent_node):
313
313
outside the class.
314
314
"""
315
315
if child_node .right == child_node :
316
- parent_node .child = None
316
+ parent_node .child = Node ( None )
317
317
else :
318
318
parent_node .child = child_node .right
319
319
child_node .right .left = child_node .left
@@ -322,7 +322,7 @@ def _cut(self, child_node, parent_node):
322
322
parent_node .degree -= 1
323
323
324
324
self ._insert_into_circular_list (self .min_node , child_node )
325
- child_node .parent = None
325
+ child_node .parent = Node ( None )
326
326
child_node .marked = False
327
327
328
328
def _cascading_cut (self , current_node ) -> None :
@@ -365,7 +365,7 @@ def delete(self, node) -> None:
365
365
self .decrease_key (node , float ("-inf" ))
366
366
self .extract_min ()
367
367
368
- def find_min (self ) -> Any :
368
+ def find_min (self ) -> float :
369
369
"""Return the minimum key without removing it from the heap.
370
370
371
371
This operation provides quick access to the minimum key in the heap
@@ -382,7 +382,7 @@ def find_min(self) -> Any:
382
382
>>> heap.find_min()
383
383
3
384
384
"""
385
- return self .min_node .key if self .min_node else None
385
+ return self .min_node .key if self .min_node else Node ( None )
386
386
387
387
def is_empty (self ) -> bool :
388
388
"""Check if heap is empty.
@@ -398,7 +398,7 @@ def is_empty(self) -> bool:
398
398
>>> heap.is_empty()
399
399
False
400
400
"""
401
- return self .min_node is None
401
+ return self .min_node . key is None
402
402
403
403
def merge (self , other_heap ) -> None :
404
404
"""Merge another Fibonacci heap into this one.
@@ -421,9 +421,9 @@ def merge(self, other_heap) -> None:
421
421
>>> heap1.total_nodes
422
422
2
423
423
"""
424
- if other_heap .min_node is None :
424
+ if other_heap .min_node . key is None :
425
425
return
426
- if self .min_node is None :
426
+ if self .min_node . key is None :
427
427
self .min_node = other_heap .min_node
428
428
else :
429
429
self .min_node .right .left = other_heap .min_node .left
0 commit comments