We can use both BFS and DFS.
Solution 1:
# T:O(n) S:O(n) class Solution: # @param node, a undirected graph node # @return a undirected graph node # @DFS def cloneGraph(self, node): def dfs(input, map): if input in map: return map[input] output = UndirectedGraphNode(input.label) map[input] = output for neighbor in input.neighbors: output.neighbors.append(dfs(neighbor, map)) return output if node == None: return None return dfs(node, {})Run Time: 192 ms
Solution 2:
# T:O(n) S:O(n) class Solution: # @param node, a undirected graph node # @return a undirected graph node # @BFS def cloneGraph(self, node): if node == None: return None queue, map = [], {} newhead = UndirectedGraphNode(node.label) queue.append(node) map[node] = newhead while queue: curr = queue.pop() for neighbor in curr.neighbors: if neighbor not in map: copy = UndirectedGraphNode(neighbor.label) map[curr].neighbors.append(copy) map[neighbor] = copy queue.append(neighbor) else: # turn directed graph to undirected graph map[curr].neighbors.append(map[neighbor]) return newheadRun Time: 84 ms
No comments:
Post a Comment