1
+ import java .util .HashMap ;
2
+ import java .util .Map ;
3
+
4
+ /*
5
+ // Definition for a Node.
6
+ class Node {
7
+ public int val;
8
+ public List<Node> neighbors;
9
+ public Node() {
10
+ val = 0;
11
+ neighbors = new ArrayList<Node>();
12
+ }
13
+ public Node(int _val) {
14
+ val = _val;
15
+ neighbors = new ArrayList<Node>();
16
+ }
17
+ public Node(int _val, ArrayList<Node> _neighbors) {
18
+ val = _val;
19
+ neighbors = _neighbors;
20
+ }
21
+ }
22
+ */
23
+ class Solution {
24
+ public Map <Node , Node > nMap = new HashMap <>();
25
+
26
+ public Node cloneGraph (Node node ) {
27
+ if (node == null )
28
+ return null ;
29
+
30
+ if (nMap .containsKey (node )) {
31
+ return nMap .get (node );
32
+ }
33
+
34
+ Node clone = new Node (node .val );
35
+ nMap .put (node , clone );
36
+
37
+ for (Node nei : node .neighbors ) {
38
+ clone .neighbors .add (cloneGraph (nei ));
39
+ }
40
+
41
+ return clone ;
42
+ }
43
+ }
44
+
45
+ class WrongSolution {
46
+ public Node graph ;
47
+ public Map <Node , Node > nMap = new HashMap <>();
48
+
49
+ public Node cloneGraph (Node node ) {
50
+ if (node == null )
51
+ return null ;
52
+
53
+ graph = new Node (node .val );
54
+ nMap .put (node , graph );
55
+
56
+ // print(graph);
57
+
58
+ return clone (node , graph );
59
+ }
60
+
61
+ public Node clone (Node node , Node cur ) {
62
+ for (int i = 0 ; i < node .neighbors .size (); i ++) {
63
+ Node adj = node .neighbors .get (i );
64
+
65
+ if (nMap .containsKey (adj )) {
66
+ return nMap .get (adj );
67
+ }
68
+
69
+ nMap .put (adj , new Node (adj .val ));
70
+ cur .neighbors .add (nMap .get (adj ));
71
+ clone (adj , nMap .get (adj ));
72
+ }
73
+
74
+ return cur ;
75
+ }
76
+
77
+ public void print (Node node ) {
78
+ System .out .println ("visit " + node .val );
79
+
80
+ for (int i = 0 ; i < node .neighbors .size (); i ++) {
81
+ Node adj = node .neighbors .get (i );
82
+ System .out .println ("nei " + adj .val );
83
+ print (adj );
84
+ }
85
+ }
86
+ }
0 commit comments