- Time Complexity: $O(V+E)$
- μ μ μ μ Vμ κ°μ μ μ Eμ λν΄, λͺ¨λ μ μ μ μ λ§νΌ μ¬κ·νΈμΆμ΄ μΌμ΄κ±°λ λͺ¨λ κ°μ μ μ λ§νΌ λ°λ³΅λ¬Έμ΄ μ€νλλ―λ‘
V+E μ΄λ€.
- Space Complexity: $O(V+E)$
- μ μ μ μ Vμ κ°μ μ μ Eμ λν΄, λͺ¨λ μ μ μ μ λ§νΌ 볡μ λ³Έλ€μ μ μ₯νλ λ°°μ΄(
copied)κ° μ μΈλκ³ λͺ¨λ κ°μ μ μ λ§νΌ λ°°μ΄(Neighbors)κ° μ μΈλλ―λ‘ V+E μ΄λ€.
func deepCopy(node *Node, copied map[int]*Node) *Node {
if node == nil {
return nil
}
copied[node.Val] = &Node{
Val: node.Val,
Neighbors: make([]*Node, len(node.Neighbors)),
}
for i := 0; i < len(node.Neighbors); i++ {
if c, found := copied[node.Neighbors[i].Val]; found {
copied[node.Val].Neighbors[i] = c
continue
}
copied[node.Val].Neighbors[i] = deepCopy(node.Neighbors[i], copied)
}
return copied[node.Val]
}
func cloneGraph(node *Node) *Node {
return deepCopy(node, make(map[int]*Node, 0))
}