На входе дерево:
1
2 3
4 5 6
Нужно не просто пройти узлы, а напечатать каждый уровень с новой строки.
Первое, что вспоминается, это BFS. Для обхода в ширину идеально подходит Queue<T>: кладём корень, достаём узел, добавляем его детей, повторяем.
Так легко получить порядок:
1 2 3 4 5 6Но настоящая часть задачи начинается дальше: как понять, где закончился уровень?
Есть два нормальных варианта:
• хранить вместе с узлом его уровень
• на каждой итерации брать queue.Count и обрабатывать ровно столько узлов текущего уровня
Второй способ часто чище: размер очереди в начале цикла и есть количество элементов на текущем уровне.
Такие задачи редко проверяют «знание деревьев ради деревьев».
Они проверяют другое: умеешь ли ты разложить проблему, выбрать структуру данных и аккуратно контролировать состояние.
Для C# это отличный мини-тест на мышление, работу с Queue<T> и понимание алгоритмов без магии фреймворков.
