Дерево может быть представлено двумя массивами: один содержит обход по предварительному порядку, а второй - обход по порядку. В этой теме обсуждается [среди прочего], как это можно сделать.
Поскольку обход массива обычно быстрее, чем обход дерева [в основном из-за производительности кэша], вы можете представить дерево как 2 массива и использовать обход обхода предварительного заказа для итерации.