commit dc148fa590a1c382eb5f4e4587f36d03fe009af0
parent c8218849eece650cf9e68e3a045748d971a01b7c
Author: Andrew Laack <andrew@laack.co>
Date: Wed, 16 Jul 2025 19:30:42 -0500
Completed clone graph
Diffstat:
1 file changed, 50 insertions(+), 0 deletions(-)
diff --git a/clone-graph/clone-graphV1.py b/clone-graph/clone-graphV1.py
@@ -0,0 +1,50 @@
+"""
+# Definition for a Node.
+class Node:
+ def __init__(self, val = 0, neighbors = None):
+ self.val = val
+ self.neighbors = neighbors if neighbors is not None else []
+"""
+
+from typing import Optional
+
+
+class Solution:
+ def cloneGraph(self, node: Optional["Node"]) -> Optional["Node"]:
+ # this is a list of values
+ # and the corresponding values that it is adjacent to.
+
+ lookup = {}
+ dfs(node, lookup)
+
+ nodes = {}
+
+ for val in lookup:
+ nodes[val] = Node(val)
+
+ for val in nodes:
+ current_node = nodes[val]
+ for tail_edge in lookup[val]:
+ if current_node.neighbors is not None:
+ current_node.neighbors.append(nodes[tail_edge])
+ else:
+ current_node.neighbors = [nodes[tail_edge]]
+
+ return nodes.get(1)
+
+
+def dfs(current_node, lookup):
+
+ if current_node is None or current_node.val in lookup:
+ return None
+
+ lookup[current_node.val] = []
+
+ if current_node.neighbors is None:
+ return
+
+ for neighbor in current_node.neighbors:
+ lookup[current_node.val].append(neighbor.val)
+ dfs(neighbor, lookup)
+
+ return