Is there an **efficient, practical** way to iterate over a binary tree given the following constraints:

1. You do not have control of the call stack, and thus may not use recursion. All state must live inside the iterator/range object, not on the stack.
2. No heap allocations may be used anywhere in the algorithm.
3. The tree may be immutable, and thus you cannot store iteration state inside it.
4. You don't have parent pointers.
5. The iterator/range struct must not be so large that it's completely unreasonable to pass to functions.

Edit:

1. This is not homework. I actually am trying to design a library that builds binary trees on a second stack and makes lots of guarantees about heap allocations (or lack thereof).
2. The trees are balanced. (They are AVL trees.)