From 4f6e63bc2b3d790309e8a773f5ae1f751f2c8696 Mon Sep 17 00:00:00 2001 From: PauLopNun Date: Mon, 6 Oct 2025 02:23:07 +0200 Subject: [PATCH 1/3] Add BinaryTreeSort algorithm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Implements Binary Tree Sort using BST with inorder traversal - O(n log n) average case, O(n²) worst case time complexity - Includes comprehensive test suite extending SortingAlgorithmTest --- .../thealgorithms/sorts/BinaryTreeSort.java | 67 +++++++++++++++++++ .../sorts/BinaryTreeSortTest.java | 8 +++ 2 files changed, 75 insertions(+) create mode 100644 src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java create mode 100644 src/test/java/com/thealgorithms/sorts/BinaryTreeSortTest.java diff --git a/src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java b/src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java new file mode 100644 index 000000000000..cafd4bc56e41 --- /dev/null +++ b/src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java @@ -0,0 +1,67 @@ +package com.thealgorithms.sorts; + +import java.util.ArrayList; +import java.util.List; + +/** + * Binary Tree Sort Algorithm Implementation + * + * @see Binary Tree Sort Algorithm + */ +public class BinaryTreeSort implements SortAlgorithm { + + private static class TreeNode> { + T data; + TreeNode left; + TreeNode right; + + TreeNode(T data) { + this.data = data; + this.left = null; + this.right = null; + } + } + + @Override + public > T[] sort(T[] array) { + if (array == null || array.length <= 1) { + return array; + } + + TreeNode root = null; + for (T value : array) { + root = insert(root, value); + } + + List result = new ArrayList<>(); + inorder(root, result); + + for (int i = 0; i < array.length; i++) { + array[i] = result.get(i); + } + + return array; + } + + private > TreeNode insert(TreeNode root, T data) { + if (root == null) { + return new TreeNode<>(data); + } + + if (SortUtils.less(data, root.data)) { + root.left = insert(root.left, data); + } else { + root.right = insert(root.right, data); + } + + return root; + } + + private > void inorder(TreeNode root, List result) { + if (root != null) { + inorder(root.left, result); + result.add(root.data); + inorder(root.right, result); + } + } +} \ No newline at end of file diff --git a/src/test/java/com/thealgorithms/sorts/BinaryTreeSortTest.java b/src/test/java/com/thealgorithms/sorts/BinaryTreeSortTest.java new file mode 100644 index 000000000000..3f7c78435642 --- /dev/null +++ b/src/test/java/com/thealgorithms/sorts/BinaryTreeSortTest.java @@ -0,0 +1,8 @@ +package com.thealgorithms.sorts; + +public class BinaryTreeSortTest extends SortingAlgorithmTest { + @Override + SortAlgorithm getSortAlgorithm() { + return new BinaryTreeSort(); + } +} \ No newline at end of file From aa4c1db45bc4f86bb923e665e323b92ef566b48a Mon Sep 17 00:00:00 2001 From: PauLopNun Date: Mon, 6 Oct 2025 02:30:52 +0200 Subject: [PATCH 2/3] Fix clang-format: add newlines --- src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java | 2 +- src/test/java/com/thealgorithms/sorts/BinaryTreeSortTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java b/src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java index cafd4bc56e41..0fad04b6e393 100644 --- a/src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java +++ b/src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java @@ -64,4 +64,4 @@ private > void inorder(TreeNode root, List result) inorder(root.right, result); } } -} \ No newline at end of file +} diff --git a/src/test/java/com/thealgorithms/sorts/BinaryTreeSortTest.java b/src/test/java/com/thealgorithms/sorts/BinaryTreeSortTest.java index 3f7c78435642..b6df22851275 100644 --- a/src/test/java/com/thealgorithms/sorts/BinaryTreeSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/BinaryTreeSortTest.java @@ -5,4 +5,4 @@ public class BinaryTreeSortTest extends SortingAlgorithmTest { SortAlgorithm getSortAlgorithm() { return new BinaryTreeSort(); } -} \ No newline at end of file +} From c3a46ece6dadcf99e1dfe15dff403e878bcacfbc Mon Sep 17 00:00:00 2001 From: PauLopNun Date: Mon, 6 Oct 2025 02:54:43 +0200 Subject: [PATCH 3/3] Remove trailing spaces from BinaryTreeSort - Fix checkstyle violations on lines 30, 38, 42 - Remove trailing whitespace for compliance - No functional changes --- src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java b/src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java index 0fad04b6e393..edc82abb08ba 100644 --- a/src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java +++ b/src/main/java/com/thealgorithms/sorts/BinaryTreeSort.java @@ -27,7 +27,7 @@ public > T[] sort(T[] array) { if (array == null || array.length <= 1) { return array; } - + TreeNode root = null; for (T value : array) { root = insert(root, value); @@ -35,11 +35,11 @@ public > T[] sort(T[] array) { List result = new ArrayList<>(); inorder(root, result); - + for (int i = 0; i < array.length; i++) { array[i] = result.get(i); } - + return array; }