Skip to content

Commit 7561b4e

Browse files
committed
Feat: 133. Clone Graph
1 parent 42b6fba commit 7561b4e

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

clone-graph/HC-kang.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/**
2+
* https://leetcode.com/problems/clone-graph
3+
* T.C. O(N)
4+
* S.C. O(N)
5+
*/
6+
function cloneGraph(node: _Node | null): _Node | null {
7+
if (!node) return null;
8+
9+
const map = new Map<number, _Node>();
10+
return dfs(node);
11+
12+
function dfs(node: _Node): _Node {
13+
if (map.has(node.val)) return map.get(node.val)!;
14+
15+
const newNode = new _Node(node.val);
16+
map.set(node.val, newNode);
17+
18+
for (let neighbor of node.neighbors) {
19+
newNode.neighbors.push(dfs(neighbor));
20+
}
21+
22+
return newNode;
23+
}
24+
}
25+
26+
/**
27+
* T.C. O(N)
28+
* S.C. O(N)
29+
*/
30+
function cloneGraph(node: _Node | null): _Node | null {
31+
if (!node) return null;
32+
33+
const map = new Map<number, _Node>();
34+
const stack = [node];
35+
const newNode = new _Node(node.val);
36+
map.set(node.val, newNode);
37+
38+
while (stack.length) {
39+
const node = stack.pop()!;
40+
const newNode = map.get(node.val)!;
41+
42+
for (let neighbor of node.neighbors) {
43+
if (!map.has(neighbor.val)) {
44+
stack.push(neighbor);
45+
const newNeighbor = new _Node(neighbor.val);
46+
map.set(neighbor.val, newNeighbor);
47+
}
48+
newNode.neighbors.push(map.get(neighbor.val)!);
49+
}
50+
}
51+
52+
return newNode;
53+
}
54+
55+
class _Node {
56+
val: number;
57+
neighbors: _Node[];
58+
59+
constructor(val?: number, neighbors?: _Node[]) {
60+
this.val = val === undefined ? 0 : val;
61+
this.neighbors = neighbors === undefined ? [] : neighbors;
62+
}
63+
}

0 commit comments

Comments
 (0)