File tree 2 files changed +85
-0
lines changed
2 files changed +85
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Node {
2
+ constructor ( val ) {
3
+ this . val = val ;
4
+ this . neighbors = [ ] ;
5
+ }
6
+ }
7
+
8
+ /**
9
+ * @param {Node } node
10
+ * @return {Node }
11
+ */
12
+ var cloneGraph = function ( node ) {
13
+ if ( ! node ) return node ;
14
+
15
+ const visited = new Map ( ) ;
16
+
17
+ const cloneNode = ( oldNode ) => {
18
+ if ( visited . has ( oldNode . val ) ) {
19
+ return visited . get ( oldNode . val ) ;
20
+ }
21
+
22
+ const newNode = new Node ( oldNode . val ) ;
23
+ visited . set ( oldNode . val , newNode ) ;
24
+ /*
25
+
26
+ > visited
27
+ Map(4) {
28
+ 1 => Node { val: 1, neighbors: [] },
29
+ 2 => Node { val: 2, neighbors: [ [Node] ] },
30
+ 3 => Node { val: 3, neighbors: [ [Node] ] },
31
+ 4 => Node { val: 4, neighbors: [] }
32
+ }
33
+
34
+ */
35
+
36
+ for ( let neighbor of oldNode . neighbors ) {
37
+ newNode . neighbors . push ( cloneNode ( neighbor ) ) ;
38
+ }
39
+
40
+ return newNode ;
41
+ } ;
42
+
43
+ return cloneNode ( node ) ;
44
+ } ;
Original file line number Diff line number Diff line change
1
+ class Node {
2
+ constructor ( val , neighbors ) {
3
+ this . val = val === undefined ? 0 : val ;
4
+ this . neighbors = neighbors === undefined ? [ ] : neighbors ;
5
+ }
6
+ } ;
7
+
8
+ /**
9
+ * @param {Node } node
10
+ * @return {Node }
11
+ */
12
+ var cloneGraph = function ( node ) {
13
+ if ( ! node ) return node ;
14
+ let map = new Map ( ) ;
15
+
16
+ // closeNode
17
+ const dfs = ( oldNode ) => {
18
+ if ( map . has ( oldNode . val ) ) {
19
+ console . log ( "all saved" )
20
+ console . log ( oldNode )
21
+ return map . get ( oldNode . val ) ;
22
+ }
23
+
24
+ let copy = new Node ( oldNode . val )
25
+ map . set ( oldNode . val , copy )
26
+
27
+ console . log ( "> map" )
28
+ console . log ( map )
29
+
30
+ for ( let nei of oldNode . neighbors ) {
31
+ copy . neighbors . push ( dfs ( nei ) ) ;
32
+ }
33
+
34
+ return copy ;
35
+ }
36
+
37
+ return dfs ( node ) ;
38
+ } ;
39
+
40
+ // let n1= new Node(1, [new Node()])
41
+ // cloneGraph
You can’t perform that action at this time.
0 commit comments