From 78e8ea04a6496e231ff81733893e760294aed390 Mon Sep 17 00:00:00 2001 From: Danil M Date: Sun, 9 Nov 2025 09:06:04 -0500 Subject: [PATCH 1/3] added the preorder traverse of binary tree, and tests --- .../kotlin/binaryTree/PreorderTraverse.kt | 16 ++++++++++ src/main/kotlin/binaryTree/TreeNode.kt | 6 ++++ .../kotlin/binaryTree/PreorderTraverseTest.kt | 32 +++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 src/main/kotlin/binaryTree/PreorderTraverse.kt create mode 100644 src/main/kotlin/binaryTree/TreeNode.kt create mode 100644 src/test/kotlin/binaryTree/PreorderTraverseTest.kt diff --git a/src/main/kotlin/binaryTree/PreorderTraverse.kt b/src/main/kotlin/binaryTree/PreorderTraverse.kt new file mode 100644 index 0000000..8d01938 --- /dev/null +++ b/src/main/kotlin/binaryTree/PreorderTraverse.kt @@ -0,0 +1,16 @@ +package binaryTree + +/** + * This is the preorder traverse of binary tree + * @param root - root of TreeNode + * @see TreeNode - node has reference on left and right child + */ + + +fun preorderTraverse(root: TreeNode?, traverse: MutableList) { + root ?: return + + traverse.add(root.value) + preorderTraverse(root.left, traverse) + preorderTraverse(root.right, traverse) +} \ No newline at end of file diff --git a/src/main/kotlin/binaryTree/TreeNode.kt b/src/main/kotlin/binaryTree/TreeNode.kt new file mode 100644 index 0000000..9cefde9 --- /dev/null +++ b/src/main/kotlin/binaryTree/TreeNode.kt @@ -0,0 +1,6 @@ +package binaryTree + +class TreeNode(val value: Int) { + var left: TreeNode? = null + var right: TreeNode? = null +} \ No newline at end of file diff --git a/src/test/kotlin/binaryTree/PreorderTraverseTest.kt b/src/test/kotlin/binaryTree/PreorderTraverseTest.kt new file mode 100644 index 0000000..74398ce --- /dev/null +++ b/src/test/kotlin/binaryTree/PreorderTraverseTest.kt @@ -0,0 +1,32 @@ +package binaryTree + +import org.junit.Assert.assertArrayEquals +import org.junit.Test + +class PreorderTraverseTest { + + @Test + fun `base_case`() { + val root = TreeNode(1) + root.left = TreeNode(2) + root.right = TreeNode(3) + + val expected = listOf(1, 2, 3) + val res = mutableListOf() + preorderTraverse(root, res) + + assertArrayEquals(expected.toIntArray(), res.toIntArray()) + } + + + @Test + fun `empty_tree`() { + val root: TreeNode? = null + + val expected = emptyList() + val res = mutableListOf() + preorderTraverse(root, res) + + assertArrayEquals(expected.toIntArray(), res.toIntArray()) + } +} \ No newline at end of file From d414599386abb79b1f7af076f27967942077c7bb Mon Sep 17 00:00:00 2001 From: Danil M Date: Mon, 10 Nov 2025 02:37:22 -0500 Subject: [PATCH 2/3] change basic logic for independent test --- src/main/kotlin/binaryTree/PreorderTraverse.kt | 18 +++++++++++++----- .../kotlin/binaryTree/PreorderTraverseTest.kt | 6 ++---- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/binaryTree/PreorderTraverse.kt b/src/main/kotlin/binaryTree/PreorderTraverse.kt index 8d01938..57bc9e6 100644 --- a/src/main/kotlin/binaryTree/PreorderTraverse.kt +++ b/src/main/kotlin/binaryTree/PreorderTraverse.kt @@ -7,10 +7,18 @@ package binaryTree */ -fun preorderTraverse(root: TreeNode?, traverse: MutableList) { - root ?: return +fun preorderTraverse(root: TreeNode?): List { + root ?: return listOf() + val nodes = mutableListOf() - traverse.add(root.value) - preorderTraverse(root.left, traverse) - preorderTraverse(root.right, traverse) + fun dfs(root: TreeNode?) { + root ?: return + + nodes.add(root.value) + dfs(root.left) + dfs(root.right) + } + dfs(root) + + return nodes } \ No newline at end of file diff --git a/src/test/kotlin/binaryTree/PreorderTraverseTest.kt b/src/test/kotlin/binaryTree/PreorderTraverseTest.kt index 74398ce..d37f3c9 100644 --- a/src/test/kotlin/binaryTree/PreorderTraverseTest.kt +++ b/src/test/kotlin/binaryTree/PreorderTraverseTest.kt @@ -12,8 +12,7 @@ class PreorderTraverseTest { root.right = TreeNode(3) val expected = listOf(1, 2, 3) - val res = mutableListOf() - preorderTraverse(root, res) + val res = preorderTraverse(root) assertArrayEquals(expected.toIntArray(), res.toIntArray()) } @@ -24,8 +23,7 @@ class PreorderTraverseTest { val root: TreeNode? = null val expected = emptyList() - val res = mutableListOf() - preorderTraverse(root, res) + val res = preorderTraverse(root) assertArrayEquals(expected.toIntArray(), res.toIntArray()) } From ff5092fc739b222cd516566c6ebc7bde5d28e345 Mon Sep 17 00:00:00 2001 From: Danial M <58209188+Ashwagandha-coder@users.noreply.github.com> Date: Thu, 20 Nov 2025 07:01:12 -0500 Subject: [PATCH 3/3] Update src/main/kotlin/binaryTree/PreorderTraverse.kt the small optimization for allocation list Co-authored-by: Rita de Cassia <69485548+Rfontt@users.noreply.github.com> --- src/main/kotlin/binaryTree/PreorderTraverse.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/binaryTree/PreorderTraverse.kt b/src/main/kotlin/binaryTree/PreorderTraverse.kt index 57bc9e6..01c53a9 100644 --- a/src/main/kotlin/binaryTree/PreorderTraverse.kt +++ b/src/main/kotlin/binaryTree/PreorderTraverse.kt @@ -8,7 +8,7 @@ package binaryTree fun preorderTraverse(root: TreeNode?): List { - root ?: return listOf() + root ?: return emptyList() val nodes = mutableListOf() fun dfs(root: TreeNode?) {