@@ -41,8 +41,11 @@ def value(self) -> T:
4141 10
4242 """
4343 return self ._value
44+
4445 @staticmethod
45- def merge (root1 : SkewNode [T ] | None , root2 : SkewNode [T ] | None ) -> SkewNode [T ] | None :
46+ def merge (
47+ root1 : SkewNode [T ] | None , root2 : SkewNode [T ] | None
48+ ) -> SkewNode [T ] | None :
4649 """
4750 Merge two nodes together.
4851 >>> SkewNode.merge(SkewNode(10), SkewNode(-10.5)).value
@@ -59,7 +62,7 @@ def merge(root1: SkewNode[T] | None, root2: SkewNode[T] | None) -> SkewNode[T] |
5962 return root2
6063 if not root2 :
6164 return root1
62-
65+
6366 # Compare values using explicit comparison function
6467 if SkewNode ._is_less_than (root1 .value , root2 .value ):
6568 # root1 is smaller, make it the new root
@@ -113,7 +116,7 @@ class SkewHeap(Generic[T]):
113116 def __init__ (self , data : Iterable [T ] | None = ()) -> None :
114117 """
115118 Initialize the skew heap with optional data
116-
119+
117120 >>> sh = SkewHeap([3, 1, 3, 7])
118121 >>> list(sh)
119122 [1, 3, 3, 7]
@@ -126,7 +129,7 @@ def __init__(self, data: Iterable[T] | None = ()) -> None:
126129 def __bool__ (self ) -> bool :
127130 """
128131 Check if the heap is not empty
129-
132+
130133 >>> sh = SkewHeap()
131134 >>> bool(sh)
132135 False
@@ -138,32 +141,33 @@ def __bool__(self) -> bool:
138141 False
139142 """
140143 return self ._root is not None
144+
141145 def __iter__ (self ) -> Iterator [T ]:
142146 """
143147 Iterate through all values in sorted order
144-
148+
145149 >>> sh = SkewHeap([3, 1, 3, 7])
146150 >>> list(sh)
147151 [1, 3, 3, 7]
148152 """
149153 # Create a temporary heap for iteration
150154 temp_heap = SkewHeap ()
151155 result : list [T ] = []
152-
156+
153157 # Pop all elements from the heap
154158 while self :
155159 item = self .pop ()
156160 result .append (item )
157161 temp_heap .insert (item )
158-
162+
159163 # Restore the heap state
160164 self ._root = temp_heap ._root
161165 return iter (result )
162166
163167 def insert (self , value : T ) -> None :
164168 """
165169 Insert a new value into the heap
166-
170+
167171 >>> sh = SkewHeap()
168172 >>> sh.insert(3)
169173 >>> sh.insert(1)
@@ -177,7 +181,7 @@ def insert(self, value: T) -> None:
177181 def pop (self ) -> T :
178182 """
179183 Remove and return the smallest value from the heap
180-
184+
181185 >>> sh = SkewHeap([3, 1, 3, 7])
182186 >>> sh.pop()
183187 1
@@ -196,10 +200,11 @@ def pop(self) -> T:
196200 if self ._root :
197201 self ._root = SkewNode .merge (self ._root .left , self ._root .right )
198202 return result
203+
199204 def top (self ) -> T :
200205 """
201206 Return the smallest value without removing it
202-
207+
203208 >>> sh = SkewHeap()
204209 >>> sh.insert(3)
205210 >>> sh.top()
@@ -221,7 +226,7 @@ def top(self) -> T:
221226 def clear (self ) -> None :
222227 """
223228 Clear all elements from the heap
224-
229+
225230 >>> sh = SkewHeap([3, 1, 3, 7])
226231 >>> sh.clear()
227232 >>> sh.pop()
0 commit comments