Вы не можете использовать рекурсию для реализации итератора в C ++, потому что ваш итератор должен вернуться из всей обработки, прежде чем он сможет вернуть результат.
Только языки, такие как C # и Python, которые имеют концепцию yield
, могут использовать рекурсию для создания итераторов.
Ваш итератор должен поддерживать стек еще не посещенных узлов.
Наверху, я думаю, что алгоритм выглядит примерно так:
- Продолжайте идти вниз и влево
- Каждый раз, когда вы сталкиваетесь с правой веткой, добавляйте ее в стек
- Если в любой момент вы не можете пойти налево, вытолкните первую ветку из стека и начните посещать ее таким же образом.