В книге Вирта "Compiler Construction" хорошо описан алгоритм как проходить по дереву не используя стек, а "вращая" указатели.
Также вы можете посмотреть реализацию в сборщике мусора Memory.ob7, который идет в примерах с моим компилятором.