Skip to content

Commit a0d8feb

Browse files
Fix/tree sort iterable type hint (#14701)
* sorts/tree_sort: use Iterable type hint and enable range doctest * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * sorts/tree_sort: fix Iterable support using iter() and next() --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent ae1f561 commit a0d8feb

1 file changed

Lines changed: 12 additions & 10 deletions

File tree

‎sorts/tree_sort.py‎

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
"""
22
Tree_sort algorithm.
3-
43
Build a Binary Search Tree and then iterate thru it to get a sorted list.
54
"""
65

76
from __future__ import annotations
87

9-
from collections.abc import Iterator
8+
from collections.abc import Iterable, Iterator
109
from dataclasses import dataclass
1110

1211

@@ -39,7 +38,7 @@ def insert(self, val: int) -> None:
3938
self.right.insert(val)
4039

4140

42-
def tree_sort(arr: list[int]) -> tuple[int, ...]:
41+
def tree_sort(arr: Iterable[int]) -> tuple[int, ...]:
4342
"""
4443
>>> tree_sort([])
4544
()
@@ -53,14 +52,17 @@ def tree_sort(arr: list[int]) -> tuple[int, ...]:
5352
(-4, 2, 5, 7, 9)
5453
>>> tree_sort([5, 6, 1, -1, 4, 37, 2, 7])
5554
(-1, 1, 2, 4, 5, 6, 7, 37)
56-
57-
# >>> tree_sort(range(10, -10, -1)) == tuple(sorted(range(10, -10, -1)))
58-
# True
55+
>>> tree_sort(range(10, -10, -1)) == tuple(sorted(range(10, -10, -1)))
56+
True
5957
"""
60-
if len(arr) == 0:
61-
return tuple(arr)
62-
root = Node(arr[0])
63-
for item in arr[1:]:
58+
iterator = iter(arr)
59+
try:
60+
first = next(iterator)
61+
except StopIteration:
62+
return ()
63+
64+
root = Node(first)
65+
for item in iterator:
6466
root.insert(item)
6567
return tuple(root)
6668

0 commit comments

Comments
 (0)