Trees
BST Insert
Insert values into a binary search tree by comparing at each node.
Algorithm
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)).
binary search tree
Values smaller than a node go left; larger values go right.