Trees
In-Order Traversal (BST)
Recurse left, visit(node), recurse right. On a binary search tree, this
emits values in ascending order — a useful invariant to teach.
Algorithm
Canonical tree 4(2(1, 3), 6(5, 7)) is a balanced BST. In-order
traversal yields [1, 2, 3, 4, 5, 6, 7].
Basic Implementation
basic.scala
import scala.collection.mutable.ArrayBuffer
class TreeNode(var value: Int, var left: Int, var right: Int)
object Main {
def makeNode(nodes: ArrayBuffer[TreeNode], value: Int, left: Int, right: Int): Int = {
val idx = nodes.length
nodes += new TreeNode(value, left, right)
idx
}
def inorder(nodes: ArrayBuffer[TreeNode], node: Int, output: ArrayBuffer[Int]): Unit = {
if (node != -1) {
inorder(nodes, nodes(node).left, output)
output += nodes(node).value
inorder(nodes, nodes(node).right, output)
}
}
def main(args: Array[String]): Unit = {
val nodes = ArrayBuffer.empty[TreeNode]
val n1 = makeNode(nodes, 1, -1, -1)
val n3 = makeNode(nodes, 3, -1, -1)
val n2 = makeNode(nodes, 2, n1, n3)
val n5 = makeNode(nodes, 5, -1, -1)
val n7 = makeNode(nodes, 7, -1, -1)
val n6 = makeNode(nodes, 6, n5, n7)
val root = makeNode(nodes, 4, n2, n6)
val output = ArrayBuffer.empty[Int]
inorder(nodes, root, output)
println(output.mkString("[", ", ", "]"))
}
}
Complexity
- Time: O(n)
- Space: O(h) call stack
Implementation notes
- Scala: a small
class TreeNode(var value: Int, var left: Int, var right: Int)stored in anArrayBuffer[TreeNode]arena. The arena pattern keeps the recursion focused on traversal without leaning on recursivecase classreferences orOption[TreeNode]. - The output buffer is a plain
ArrayBuffer[Int]so the+=growth is visible to the caller; the lesson does not lean on a sequence helper likeSeq.flatMaporfor ... yield. - The replay shows the running
outputlist and the visited node value on each visit frame, withnode(<value>)labels instead of runtime references.
in-order recursion
`inorder(node.left); output += node.value; inorder(node.right)`.
BST invariant
The same recursion on a binary search tree always emits values in ascending order.