Solution (source code)

= Solution

Use the empty reference as the <base case>:
``
def printInorder(root: Tree): Unit = {
  if (root != null) {
    printInorder(root.left)
    println(root.datum)
    printInorder(root.right)
  }
}
``
<Induction> on the tree proves the order: the first <recursive call> prints exactly the left <subtree>, then the procedure prints the root, then the final call prints exactly the right <subtree>. A finite acyclic tree supplies decreasing proper <subtrees>, so the <recursion> terminates. The traversal is valid for arbitrary <integer> labels; sorted output would additionally require a <binary search tree> <invariant>.