Обход дерева без рекурсии достаточно прост. Предполагая двоичное дерево, каждый узел предположительно имеет три ссылки на другие узлы. Левый ребенок, правый ребенок и родитель.
Таким образом, предполагая порядок итераций слева направо по глубине, вы переходите по ссылкам left-child в while-lop (псевдокод while current.left-child != null, current = current.left-child
)
если нет левого ребенка, попробуйте правого ребенка. Если правильного ребенка тоже нет, вы поднимаетесь, пока не найдете правильного ребенка (while current.right-child == null, current = current.parent
)
Вы не указали язык, но так как вы хотите избежать рекурсии, я собираюсь предположить, что это какой-то императивный язык, и тогда вышеупомянутое должно быть возможным.
Короче говоря, ваш итератор должен содержать ссылку на текущий узел и некоторую информацию о том, как он движется.