Solution (source code)

= Solution

Use the heap-numbered binary tree with root label zero and children $2k+1,2k+2$. Its strict descendants in <breadth-first search> order are \b[$1,2,3,\ldots$]. A machine-safe `Node[Int]` version stops at the largest representable label:

``
class NumberNode(val label: Int) extends Node[Int] {
  require(label >= 0)
  def children(): Iter[Node[Int]] = new Iter[Node[Int]] {
    private var candidate = 2L * label.toLong + 1L
    private val last = candidate + 1L
    def hasNext: Boolean = candidate <= last && candidate <= Int.MaxValue
    def next(): Node[Int] = {
      require(hasNext)
      val answer = new NumberNode(candidate.toInt)
      candidate += 1L
      answer
    }
  }
}

val traversal = breadthFirst(new NumberNode(0))
var expected = 1
while (expected <= 1000) {
  assert(traversal.hasNext)
  assert(traversal.next().label == expected)
  expected += 1
}
``

The arithmetic is widened before computing child labels, so no negative wrapped labels occur. Repeated `hasNext` calls should not skip nodes; a leaf root should produce immediate exhaustion, and uneven finite trees should retain sibling order across parents. A fresh second traversal should start again at one.

Literal unbounded increase is impossible with the bounded `Int` type. For a genuinely infinite test, change the label and child arithmetic to `BigInt`; the same construction then has no representational endpoint. The shown finite-prefix test already exercises lazy traversal without allocating the entire very large `Int`-labelled tree.