30
30
/** see test {@link _133_CloneGraph.SolutionDFSTest } */
31
31
public class SolutionDFS {
32
32
33
+ private Map <UndirectedGraphNode ,UndirectedGraphNode >cloneMap =new HashMap <>();
34
+
33
35
/**
34
36
* DFS version, see also {@link _133_CloneGraph.Solution BFS version }
35
37
* Similar to memo version top-down dp problem. First find in memo,
36
38
* if we have copied that node, return it; otherwise, construct a new node
37
39
* and add neighbors to it.
38
40
*/
39
41
public UndirectedGraphNode cloneGraph (UndirectedGraphNode node ) {
40
- Map <UndirectedGraphNode ,UndirectedGraphNode >cloneMap =
41
- new HashMap <>();
42
- return cloneGraph (node ,cloneMap );
43
- }
44
-
45
- private UndirectedGraphNode cloneGraph (UndirectedGraphNode node ,
46
- Map <UndirectedGraphNode ,UndirectedGraphNode >cloneMap ) {
47
42
if (cloneMap .containsKey (node )) {
48
43
// look up in memo first
49
44
return cloneMap .get (node );
@@ -55,7 +50,7 @@ private UndirectedGraphNode cloneGraph(UndirectedGraphNode node,
55
50
// update map here, don't wait until return statement like memo version dp
56
51
cloneMap .put (node ,nodeCopy );
57
52
for (UndirectedGraphNode neighbor :node .neighbors ) {
58
- nodeCopy .neighbors .add (cloneGraph (neighbor , cloneMap ));
53
+ nodeCopy .neighbors .add (cloneGraph (neighbor ));
59
54
}
60
55
return nodeCopy ;
61
56
}