File tree Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for _Node.
3
+ * class _Node {
4
+ * val: number
5
+ * neighbors: _Node[]
6
+ *
7
+ * constructor(val?: number, neighbors?: _Node[]) {
8
+ * this.val = (val===undefined ? 0 : val)
9
+ * this.neighbors = (neighbors===undefined ? [] : neighbors)
10
+ * }
11
+ * }
12
+ *
13
+ */
14
+
15
+ function cloneGraph ( node : _Node | null ) : _Node | null {
16
+ if ( ! node ) return null ;
17
+
18
+ const cloned = new Map < number , _Node > ( ) ;
19
+
20
+ const queue : _Node [ ] = [ ] ;
21
+
22
+ const copied = new _Node ( node . val ) ;
23
+ cloned . set ( node . val , copied ) ;
24
+
25
+ queue . push ( node ) ;
26
+
27
+ let pointer = 0 ;
28
+
29
+ while ( pointer < queue . length ) {
30
+ const current = queue [ pointer ++ ] ;
31
+
32
+ const copiedNode = cloned . get ( current . val ) ! ;
33
+
34
+ for ( const neighbor of current . neighbors ) {
35
+ if ( ! cloned . has ( neighbor . val ) ) {
36
+ const copiedNeighbor = new _Node ( neighbor . val ) ;
37
+ cloned . set ( neighbor . val , copiedNeighbor ) ;
38
+
39
+ queue . push ( neighbor ) ;
40
+ }
41
+ copiedNode . neighbors . push ( cloned . get ( neighbor . val ) ! ) ;
42
+ }
43
+ }
44
+
45
+ return copied ;
46
+ }
You can’t perform that action at this time.
0 commit comments