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