Вы можете генерировать структуру уровня за уровнем.На каждой итерации создайте один уровень узлов, поместите их в массив и подключите к ним предыдущий уровень.Примерно так (C #):
Node GenerateStructure(int levels)
{
Node root = null;
Node[] previous = null;
for (int level = 1; level <= levels; level++)
{
int count = level;
var current = new Node[count];
for (int i = 0; i < count; i++)
current[i] = new Node();
if (level == 1)
root = current[0];
for (int i = 0; i < count - 1; i++)
{
previous[i].Left = current[i];
previous[i].Right = current[i + 1];
}
previous = current;
}
return root;
}
Вся структура требует O (N ^ 2) памяти, где N - номер уровня.Этот подход требует O (N) дополнительной памяти для двух массивов.Другой подход заключается в создании графика слева направо, но для этого также потребуется O (N) дополнительной памяти.
Очевидно, что сложность по времени равна O (N ^ 2).