mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
[mypy] Add/fix type annotations in data_structures/heap/skew_heap.py
(#5634)
* Add abstract base class Comparable * [mypy] Fix type annotations (strict mode) * Fix a typo * Remove Comparable class and set bound to bool
This commit is contained in:
parent
21c99d2ae2
commit
99983c91ca
|
@ -2,9 +2,9 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Generic, Iterable, Iterator, TypeVar
|
||||
from typing import Any, Generic, Iterable, Iterator, TypeVar
|
||||
|
||||
T = TypeVar("T")
|
||||
T = TypeVar("T", bound=bool)
|
||||
|
||||
|
||||
class SkewNode(Generic[T]):
|
||||
|
@ -51,7 +51,7 @@ class SkewHeap(Generic[T]):
|
|||
values. Both operations take O(logN) time where N is the size of the
|
||||
structure.
|
||||
Wiki: https://en.wikipedia.org/wiki/Skew_heap
|
||||
Visualisation: https://www.cs.usfca.edu/~galles/visualization/SkewHeap.html
|
||||
Visualization: https://www.cs.usfca.edu/~galles/visualization/SkewHeap.html
|
||||
|
||||
>>> list(SkewHeap([2, 3, 1, 5, 1, 7]))
|
||||
[1, 1, 2, 3, 5, 7]
|
||||
|
@ -70,14 +70,16 @@ class SkewHeap(Generic[T]):
|
|||
"""
|
||||
|
||||
def __init__(self, data: Iterable[T] | None = ()) -> None:
|
||||
|
||||
"""
|
||||
>>> sh = SkewHeap([3, 1, 3, 7])
|
||||
>>> list(sh)
|
||||
[1, 3, 3, 7]
|
||||
"""
|
||||
self._root: SkewNode[T] | None = None
|
||||
for item in data:
|
||||
self.insert(item)
|
||||
if data:
|
||||
for item in data:
|
||||
self.insert(item)
|
||||
|
||||
def __bool__(self) -> bool:
|
||||
"""
|
||||
|
@ -103,7 +105,7 @@ class SkewHeap(Generic[T]):
|
|||
>>> list(sh)
|
||||
[1, 3, 3, 7]
|
||||
"""
|
||||
result = []
|
||||
result: list[Any] = []
|
||||
while self:
|
||||
result.append(self.pop())
|
||||
|
||||
|
@ -127,7 +129,7 @@ class SkewHeap(Generic[T]):
|
|||
"""
|
||||
self._root = SkewNode.merge(self._root, SkewNode(value))
|
||||
|
||||
def pop(self) -> T:
|
||||
def pop(self) -> T | None:
|
||||
"""
|
||||
Pop the smallest value from the heap and return it.
|
||||
|
||||
|
@ -146,7 +148,9 @@ class SkewHeap(Generic[T]):
|
|||
IndexError: Can't get top element for the empty heap.
|
||||
"""
|
||||
result = self.top()
|
||||
self._root = SkewNode.merge(self._root.left, self._root.right)
|
||||
self._root = (
|
||||
SkewNode.merge(self._root.left, self._root.right) if self._root else None
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
|
@ -172,7 +176,7 @@ class SkewHeap(Generic[T]):
|
|||
raise IndexError("Can't get top element for the empty heap.")
|
||||
return self._root.value
|
||||
|
||||
def clear(self):
|
||||
def clear(self) -> None:
|
||||
"""
|
||||
Clear the heap.
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user