Я думаю, что определенно есть способ рекурсивного решения этой проблемы. Поскольку это полное дерево, то каждое поддерево в этом дереве является полным деревом. И поскольку это полное дерево, вы можете знать точную структуру дерева, и зная это, вы сможете узнать индексы корней поддеревьев в массиве. И тогда подзадачи становятся реконструкцией левого поддерева и правого поддерева. По сути, вы могли бы иметь указатель, инициализированный в 0-ую позицию индекса массива, и обходить массив, используя этот указатель, и в то же время строить дерево. Когда этот глобальный указатель указывает на корневой индекс, создайте корень, подключите его левый указатель к построенному левому поддереву, увеличьте указатель, рекурсивно вызовите эту функцию для построения правого поддерева и подключите его правый указатель к построенному правому поддереву.