@@ -61,7 +61,9 @@ def value(self) -> T:
6161 return self ._value
6262
6363 @staticmethod
64- def merge (root1 : SkewNode [T ] | None , root2 : SkewNode [T ] | None ) -> SkewNode [T ] | None :
64+ def merge (
65+ root1 : SkewNode [T ] | None , root2 : SkewNode [T ] | None
66+ ) -> SkewNode [T ] | None :
6567 """
6668 Merge two nodes together.
6769 >>> SkewNode.merge(SkewNode(10), SkewNode(-10.5)).value
@@ -78,7 +80,7 @@ def merge(root1: SkewNode[T] | None, root2: SkewNode[T] | None) -> SkewNode[T] |
7880 return root2
7981 if not root2 :
8082 return root1
81-
83+
8284 # Compare values using explicit __lt__ method
8385 try :
8486 # Check if root1 is smaller than root2
@@ -92,7 +94,7 @@ def merge(root1: SkewNode[T] | None, root2: SkewNode[T] | None) -> SkewNode[T] |
9294 except (TypeError , AttributeError ):
9395 # Fallback if __lt__ comparison fails
9496 pass
95-
97+
9698 # If root2 is smaller or comparison failed, use root2 as new root
9799 result = root2
98100 temp = root2 .right
@@ -101,7 +103,6 @@ def merge(root1: SkewNode[T] | None, root2: SkewNode[T] | None) -> SkewNode[T] |
101103 return result
102104
103105
104-
105106class SkewHeap [T ]:
106107 """
107108 A data structure that allows inserting a new value and popping the smallest
@@ -128,7 +129,7 @@ class SkewHeap[T]:
128129 def __init__ (self , data : Iterable [T ] | None = ()) -> None :
129130 """
130131 Initialize the skew heap with optional data
131-
132+
132133 >>> sh = SkewHeap([3, 1, 3, 7])
133134 >>> list(sh)
134135 [1, 3, 3, 7]
@@ -141,7 +142,7 @@ def __init__(self, data: Iterable[T] | None = ()) -> None:
141142 def __bool__ (self ) -> bool :
142143 """
143144 Check if the heap is not empty
144-
145+
145146 >>> sh = SkewHeap()
146147 >>> bool(sh)
147148 False
@@ -157,25 +158,25 @@ def __bool__(self) -> bool:
157158 def __iter__ (self ) -> Iterator [T ]:
158159 """
159160 Iterate through all values in sorted order
160-
161+
161162 >>> sh = SkewHeap([3, 1, 3, 7])
162163 >>> list(sh)
163164 [1, 3, 3, 7]
164165 """
165166 result : list [T ] = []
166167 while self :
167168 result .append (self .pop ())
168-
169+
169170 # Restore the heap state
170171 for item in result :
171172 self .insert (item )
172-
173+
173174 return iter (result )
174175
175176 def insert (self , value : T ) -> None :
176177 """
177178 Insert a new value into the heap
178-
179+
179180 >>> sh = SkewHeap()
180181 >>> sh.insert(3)
181182 >>> sh.insert(1)
@@ -189,7 +190,7 @@ def insert(self, value: T) -> None:
189190 def pop (self ) -> T :
190191 """
191192 Remove and return the smallest value from the heap
192-
193+
193194 >>> sh = SkewHeap([3, 1, 3, 7])
194195 >>> sh.pop()
195196 1
@@ -212,7 +213,7 @@ def pop(self) -> T:
212213 def top (self ) -> T :
213214 """
214215 Return the smallest value without removing it
215-
216+
216217 >>> sh = SkewHeap()
217218 >>> sh.insert(3)
218219 >>> sh.top()
@@ -234,7 +235,7 @@ def top(self) -> T:
234235 def clear (self ) -> None :
235236 """
236237 Clear all elements from the heap
237-
238+
238239 >>> sh = SkewHeap([3, 1, 3, 7])
239240 >>> sh.clear()
240241 >>> sh.pop()
0 commit comments