Skip to content

Commit 49eab87

Browse files
committed
clone-graph
1 parent 247fb9d commit 49eab87

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

clone-graph/i-mprovising.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"""
2+
Time complexity O(V + E)
3+
Space complexity O(V + E)
4+
5+
DFS, BFS
6+
"""
7+
from collections import deque
8+
9+
class Solution:
10+
def cloneGraph(self, node: Optional['Node']) -> Optional['Node']:
11+
if not node:
12+
return
13+
14+
clones = {}
15+
16+
def dfs(node):
17+
if node in clones:
18+
return clones[node]
19+
clone = Node(node.val)
20+
clones[node] = clone
21+
for nei in node.neighbors:
22+
clone.neighbors.append(dfs(nei))
23+
return clone
24+
25+
return dfs(node)
26+
27+
def bfs(self, node):
28+
if not node:
29+
return
30+
31+
clone = Node(node.val)
32+
clones = {node: clone}
33+
queue = deque([node])
34+
while queue:
35+
node = queue.popleft()
36+
for nei in node.neighbors:
37+
if nei not in clones:
38+
clones[nei] = Node(nei.val)
39+
queue.append(nei)
40+
clones[node].neighbors.append(clones[nei])
41+
return clone

0 commit comments

Comments
 (0)