Junior — Middle
Kaip galima atlikti įvairių duomenų medžių apėjimą?
sobes.tech AI
Atsakymas iš AI
Duomenų medžių apėjimas paprastai atliekamas šiais metodais:
-
Giliai pirmiausia apėjimas (DFS)
- Pre-order (šaknis → kairė → dešinė)
- In-order (kairė → šaknis → dešinė)
- Post-order (kairė → dešinė → šaknis)
-
Plotis pirmiausia apėjimas (BFS)
- Lankymas mazgų pagal lygius, pradedant nuo šaknies
Go kalboje tai galima įgyvendinti rekursyviai arba naudojant staką/eilę. Pavyzdžiui, giliai pirmiausia apėjimas (in-order) dvejetainiam medyje:
func inOrder(node *Node) {
if node == nil {
return
}
inOrder(node.Left)
fmt.Println(node.Value)
inOrder(node.Right)
}
Plotis pirmiausia apėjimui dažnai naudojama eilė:
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)
}
}
}