Назад к вопросам
Junior — Middle
78
Какими методами можно осуществлять обход различных деревьев данных?
Компании, где спрашивали
EMCD
Ответ от нейросети
sobes.tech AI
Обход деревьев данных обычно осуществляется следующими методами:
-
Обход в глубину (DFS)
- Pre-order (корень → левый → правый)
- In-order (левый → корень → правый)
- Post-order (левый → правый → корень)
-
Обход в ширину (BFS)
- Посещение узлов по уровням, начиная с корня
В Go это можно реализовать рекурсивно или с помощью стека/очереди. Например, обход в глубину (in-order) для бинарного дерева:
func inOrder(node *Node) {
if node == nil {
return
}
inOrder(node.Left)
fmt.Println(node.Value)
inOrder(node.Right)
}
Для обхода в ширину обычно используют очередь:
func bfs(root *Node) {
if root == nil {
return
}
queue := []*Node{root}
for len(queue) > 0 {
current := queue[0]
queue = queue[1:]
fmt.Println(current.Value)
if current.Left != nil {
queue = append(queue, current.Left)
}
if current.Right != nil {
queue = append(queue, current.Right)
}
}
}