Skip to content

Fix tree_sort dropping duplicate values - #15381

Merged
cclauss merged 2 commits into
TheAlgorithms:masterfrom
Darkslayer3324j:fix/tree-sort-duplicates
Sep 20, 2026
Merged

cclauss merged 2 commits into
TheAlgorithms:masterfrom
Darkslayer3324j:fix/tree-sort-duplicates

Conversation

@Darkslayer3324j

Copy link
Copy Markdown
Contributor

Describe your change

  • Fix a bug or typo in an existing algorithm?
  • Add or change doctests? -- Note: Please avoid changing both code and tests in a single pull request.

tree_sort silently drops repeated values, so it is not a sort of its input:

>>> tree_sort([1, 1])
(1,)
>>> tree_sort([3, 1, 3, 2, 1])
(1, 2, 3)      # expected (1, 1, 2, 3, 3)

Node.insert only handles val < self.val and val > self.val; a value equal to the node is ignored. The fix sends equal values to the right subtree so every element is kept. Doctests for repeated values are added to the docstring. I also compared it with sorted() on 18,000 random lists (lengths 0-59, values -4..4): 0 mismatches after the change.

Checklist

  • I have read CONTRIBUTING.md.
  • This pull request is all my own work -- I have not plagiarized.
  • I know that pull requests will not be merged if they fail the automated tests.
  • This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
  • All new Python files are placed inside an existing directory.
  • All filenames are in all lowercase characters with no spaces or dashes.
  • All functions and variable names follow Python naming conventions.
  • All function parameters and return values are annotated with Python type hints.
  • All functions have doctests that pass the automated testing.
  • All new algorithms include at least one URL that points to Wikipedia or another similar explanation.
  • If this pull request resolves one or more open issues, then the description above includes the issue number(s) with a closing keyword: "Fixes #ISSUE-NUMBER". (No open issue for this.)

I left "all my own work" unticked on purpose: this change was written with AI assistance (Claude Code, as AGENTS.md invites). I found the problem by comparing every function in sorts/ against sorted() on random lists, reproduced it, and ran the doctests, ruff check and ruff format --check on the changed file.

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 <noreply@anthropic.com>
@algorithms-keeper algorithms-keeper Bot added awaiting reviews This PR is ready to be reviewed enhancement This PR modified some existing files labels Sep 19, 2026
@cclauss cclauss closed this Sep 20, 2026
@cclauss cclauss reopened this Sep 20, 2026
@algorithms-keeper algorithms-keeper Bot removed the awaiting reviews This PR is ready to be reviewed label Sep 20, 2026
@cclauss
cclauss merged commit 7dbc8a1 into TheAlgorithms:master Sep 20, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement This PR modified some existing files

2 participants