擅长:python、mysql、java
<p>代码无法工作的主要原因是将原始节点存储在<code>visited</code>字典中。必须将已处理的节点DFS克隆存储在<code>visited</code>中。为什么?因为在<code>new_neighbors.append(visited[nei.val])</code>内,您将访问的节点添加到新克隆节点的邻居。但任何克隆节点都应该只有克隆的邻居,而不是原始节点</p>
<p>我决定使用DFS实现您的算法/想法的我自己的版本,下一个代码被LeetCode系统成功接受(所有测试通过):</p>
<pre><code>class Solution:
def __init__(self):
self.visited = {}
def cloneGraph(self, node: 'Node') -> 'Node':
if node is None:
return None
if node.val in self.visited:
return self.visited[node.val]
nnode = Node(val = node.val)
self.visited[nnode.val] = nnode
nnode.neighbors = [self.cloneGraph(c) for c in node.neighbors]
return nnode
</code></pre>