Это может быть сделано только для деревьев до определенного предела по глубине (и, следовательно, по количеству элементов), поскольку для этого требуется вспомогательная память, пропорциональная глубине дерева; в то время, когда вы выполняете итерацию на элементе, вам нужно отслеживать, к какому элементу перейти к следующему, и если вы находитесь в одном из самых глубоких листьев, то количество требуемых «указателей отслеживания» будет всего на 1 меньше глубины дерева. Например, если вы можете принять ограничение глубиной 32 (и, следовательно, не более 4 294 967 295 узлов), потребуется вспомогательный массив фиксированного размера из 32 указателей (плюс индекс на нем).
Для двоичных деревьев, которые не являются полностью вырожденными (и, таким образом, имеют количество узлов, примерно пропорциональных 2**depth
, а не только depth
;-), этот фиксированный объем вспомогательной памяти должен быть приемлемым, т.е. только что исправили вспомогательную память порядка log(N)
указателей для итерации по любому дереву с N
узлами. Если это не приемлемо, то ответ на ваш вопрос "есть ли ...?" нет ; -).