Sobes.tech
Назад к вопросам
Junior — Middle
78

Какими методами можно осуществлять обход различных деревьев данных?

Компании, где спрашивали
EMCD

Ответ от нейросети

sobes.tech AI

Обход деревьев данных обычно осуществляется следующими методами:

  1. Обход в глубину (DFS)

    • Pre-order (корень → левый → правый)
    • In-order (левый → корень → правый)
    • Post-order (левый → правый → корень)
  2. Обход в ширину (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)
        }
    }
}