Дан лес категорий: у каждого узла есть Label и список детей Kids (может быть nil
или пустым). Верните все метки в порядке обхода в глубину: сначала узел, затем его дети
слева направо (прямой обход, pre-order).
type TreeNode struct {
Label string
Kids []*TreeNode
}
// Labels возвращает метки всех узлов леса в порядке прямого обхода в глубину.
func Labels(forest []*TreeNode) []string
Пример
NodeA
└── NodeA.1
NodeB
├── NodeB.1
└── NodeB.2
└── NodeB.2.1
→ ["NodeA", "NodeA.1", "NodeB", "NodeB.1", "NodeB.2", "NodeB.2.1"]
Ограничения
- До 10⁶ узлов, глубина тоже может достигать 10⁶ (вырожденное дерево-«бамбук»).
nil среди детей не бывает. Пустой лес — пустой результат.
- O(n) времени.
Устно: напишите сначала рекурсивно, потом — без рекурсии, на явном стеке.
Когда второй вариант действительно нужен?
Разбор и эталонное решение — после своей попытки: на собеседовании подсказок не будет.
Сначала попробуй сам — подсказки не дают готовый ответ.