原题
https://leetcode.cn/problems/clone-graph/description/
思路
深度优先搜索
复杂度
时间:O(n)
空间:O(n)
Python代码
"""
# Definition for a Node.
class Node:
def __init__(self, val = 0, neighbors = None):
self.val = val
self.neighbors = neighbors if neighbors is not None else []
"""
from typing import Optional
class Solution:
def cloneGraph(self, node: Optional['Node']) -> Optional['Node']:
# 字典存储节点和克隆的节点
d = dict()
def dfs(node):
if not node:
return None
if node in d:
return d[node]
clone = Node(node.val, [])
# 更新字典
d[node] = clone
for neighbor in node.neighbors:
clone.neighbors.append(dfs(neighbor))
return clone
return dfs(node)
Go代码
/**
* Definition for a Node.
* type Node struct {
* Val int
* Neighbors []*Node
* }
*/
func cloneGraph(node *Node) *Node {
// 字典存储节点和克隆的节点
d := make(map[*Node]*Node)
var dfs func(*Node) *Node
// 返回节点对应的克隆节点
dfs = func(node *Node) *Node {
if node == nil {
return nil
}
if d[node] != nil {
return d[node]
}
clone := &Node{Val: node.Val}
// 更新字典
d[node] = clone
for _, neighbor := range node.Neighbors {
clone.Neighbors = append(clone.Neighbors, dfs(neighbor))
}
return clone
}
return dfs(node)
}
322

被折叠的 条评论
为什么被折叠?



