From 1ccd8c0fb1d0b6b82ce37f3cd07ec540e7254791 Mon Sep 17 00:00:00 2001 From: Darkslayer3324j Date: Sat, 19 Sep 2026 21:22:47 +0500 Subject: [PATCH] Fix tree_sort dropping duplicate values Node.insert ignored values equal to the current node, so tree_sort([1, 1]) returned (1,). Send equal values to the right subtree and add doctests for repeated values. Co-Authored-By: Claude Sonnet 5 --- sorts/tree_sort.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/sorts/tree_sort.py b/sorts/tree_sort.py index ffd339a31410..6c33d1109b93 100644 --- a/sorts/tree_sort.py +++ b/sorts/tree_sort.py @@ -36,11 +36,11 @@ def insert(self, val: T) -> None: self.left = Node(val) else: self.left.insert(val) - elif val > self.val: - if self.right is None: - self.right = Node(val) - else: - self.right.insert(val) + # Equal values go to the right so that duplicates are kept. + elif self.right is None: + self.right = Node(val) + else: + self.right.insert(val) def tree_sort[T: Comparable](arr: Iterable[T]) -> tuple[T, ...]: @@ -63,6 +63,10 @@ def tree_sort[T: Comparable](arr: Iterable[T]) -> tuple[T, ...]: ('a', 'b', 'c') >>> tree_sort([2.5, -1, 0.0]) (-1, 0.0, 2.5) + >>> tree_sort([3, 1, 3, 2, 1]) + (1, 1, 2, 3, 3) + >>> tree_sort([2, 2, 2]) + (2, 2, 2) >>> tree_sort([1, "a"]) Traceback (most recent call last): ...