Это неуклюжий тип обхода дерева.Интересно, как часто кому-то когда-либо приходилось делать такие вещи в реальном коде?Тем не менее, это проблема, которую нужно решить здесь ...
Вот как я бы подходил к решению этой проблемы:
Во-первых, когда я сравниваю желаемый результат со структурой дерева, я замечаючто каждый «уровень» дерева обрабатывается по очереди сверху вниз.Итак, сначала верхний узел, затем все дочерние узлы, затем все примечания потомков и так далее.Поэтому, вероятно, хорошее решение будет включать цикл, который обрабатывает один уровень и в то же время создает список узлов на следующем уровне, который будет использоваться на следующей итерации цикла.
Далее этот «зиг»zag "порядок означает, что необходимо чередовать, в каком направлении обрабатываются дочерние узлы. Если конкретная итерация идет слева направо, то следующая итерация должна идти справа налево.А затем обратно слева направо для последующей итерации и так далее.Таким образом, в моей идее цикла, который обрабатывает один уровень и создает список следующего уровня, он, вероятно, должен иметь какое-то альтернативное поведение при построении этого списка узлов для следующего уровня.На четных итерациях список строится одним способом.На нечетных итерациях список строится по-другому.
В качестве альтернативы, еще один способ думать обо всем этом: разработать решение, которое может построить список результатов в 1,2,3,4,56 и т. Д. Заказ.Затем измените этот дизайн так, чтобы он имел зигзагообразный порядок.
Достаточно ли у вас идеи о том, как разработать решение?