3
3
from __future__ import annotations
4
4
5
5
import random
6
- from typing import Generic , Iterable , TypeVar
6
+ from typing import Any , Generic , Iterable , TypeVar
7
7
8
- T = TypeVar ("T" )
8
+ T = TypeVar ("T" , bound = bool )
9
9
10
10
11
11
class RandomizedHeapNode (Generic [T ]):
@@ -76,8 +76,10 @@ def __init__(self, data: Iterable[T] | None = ()) -> None:
76
76
[1, 3, 3, 7]
77
77
"""
78
78
self ._root : RandomizedHeapNode [T ] | None = None
79
- for item in data :
80
- self .insert (item )
79
+
80
+ if data :
81
+ for item in data :
82
+ self .insert (item )
81
83
82
84
def insert (self , value : T ) -> None :
83
85
"""
@@ -93,7 +95,7 @@ def insert(self, value: T) -> None:
93
95
"""
94
96
self ._root = RandomizedHeapNode .merge (self ._root , RandomizedHeapNode (value ))
95
97
96
- def pop (self ) -> T :
98
+ def pop (self ) -> T | None :
97
99
"""
98
100
Pop the smallest value from the heap and return it.
99
101
@@ -111,7 +113,12 @@ def pop(self) -> T:
111
113
...
112
114
IndexError: Can't get top element for the empty heap.
113
115
"""
116
+
114
117
result = self .top ()
118
+
119
+ if self ._root is None :
120
+ return None
121
+
115
122
self ._root = RandomizedHeapNode .merge (self ._root .left , self ._root .right )
116
123
117
124
return result
@@ -138,7 +145,7 @@ def top(self) -> T:
138
145
raise IndexError ("Can't get top element for the empty heap." )
139
146
return self ._root .value
140
147
141
- def clear (self ):
148
+ def clear (self ) -> None :
142
149
"""
143
150
Clear the heap.
144
151
@@ -151,7 +158,7 @@ def clear(self):
151
158
"""
152
159
self ._root = None
153
160
154
- def to_sorted_list (self ) -> list [T ]:
161
+ def to_sorted_list (self ) -> list [Any ]:
155
162
"""
156
163
Returns sorted list containing all the values in the heap.
157
164
0 commit comments