diff --git a/src/main/kotlin/binaryTree/PreorderTraverse.kt b/src/main/kotlin/binaryTree/PreorderTraverse.kt new file mode 100644 index 0000000..57bc9e6 --- /dev/null +++ b/src/main/kotlin/binaryTree/PreorderTraverse.kt @@ -0,0 +1,24 @@ +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?): List { + root ?: return listOf() + val nodes = mutableListOf() + + 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/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..d37f3c9 --- /dev/null +++ b/src/test/kotlin/binaryTree/PreorderTraverseTest.kt @@ -0,0 +1,30 @@ +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 = preorderTraverse(root) + + assertArrayEquals(expected.toIntArray(), res.toIntArray()) + } + + + @Test + fun `empty_tree`() { + val root: TreeNode? = null + + val expected = emptyList() + val res = preorderTraverse(root) + + assertArrayEquals(expected.toIntArray(), res.toIntArray()) + } +} \ No newline at end of file