Trees
BST Insert
Insert values into a binary search tree by comparing at each node.
Algorithm
The canonical tree is 4(2(1,3),6(5,7)), so this Kotlin DSA
implementation can be compared directly with the rest of the DSA track.
binary search tree
Values smaller than a node go left; larger values go right.
Visual walkthrough
Basic Implementation
basic.kt
class Node(val value: Int, var left: Node? = null, var right: Node? = null)
fun render(node: Node?): String {
if (node == null) return "_"
if (node.left == null && node.right == null) return node.value.toString()
return "${node.value}(${render(node.left)},${render(node.right)})"
}
fun sampleTree() = Node(4, Node(2, Node(1), Node(3)), Node(6, Node(5), Node(7)))
fun listString(values: List<Int>) = values.joinToString(", ", "[", "]")
fun insert(root: Node?, value: Int): Node { if (root == null) return Node(value); if (value < root.value) root.left = insert(root.left, value) else root.right = insert(root.right, value); return root }
fun main() { var root: Node? = null; for (value in listOf(4, 2, 6, 1, 3, 5, 7)) root = insert(root, value); println(render(root)) }
Complexity
- Time: O(h) per insert
- Space: O(n)
Implementation notes
- Kotlin represents nodes with
class Node(val value: Int, var left: Node? = null, var right: Node? = null), so the stored value is immutable but child links are nullable and mutable. mainstarts withvar root: Node? = nulland assignsroot = insert(root, value)for each value, allowing the first insert to replace the null root with a new node.insert(root: Node?, value: Int): NodeallocatesNode(value)only when the current subtree root isnull; otherwise it mutatesroot.leftorroot.rightand returns the same root reference.- The comparison branch is
if (value < root.value) ... else ..., so equal values would follow the right-child path in this implementation. - Recursive calls write the returned subtree back into the nullable child slot:
root.left = insert(root.left, value)orroot.right = insert(root.right, value). - The trace inserts
4,2,6,1,3,5,7, producing4(2(1,3),6(5,7)); it also records a sorted-insert contrast1(_,2(_,3(_,4)))with height4. render(root)prints_for null children andprintln(render(root))outputs4(2(1,3),6(5,7)).