From 0cd0a619195998b83214df8dc48c4270e1079920 Mon Sep 17 00:00:00 2001 From: walkersmith Date: Wed, 30 Jul 2025 12:24:34 -0400 Subject: [PATCH] solve problem --- leet-code/133-clone-graph/README.md | 28 ++++++++++++++++++++ leet-code/133-clone-graph/index.js | 41 +++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 leet-code/133-clone-graph/README.md create mode 100644 leet-code/133-clone-graph/index.js diff --git a/leet-code/133-clone-graph/README.md b/leet-code/133-clone-graph/README.md new file mode 100644 index 0000000..d943705 --- /dev/null +++ b/leet-code/133-clone-graph/README.md @@ -0,0 +1,28 @@ +# 133-clone-graph +Given a reference of a node in a connected undirected graph. + +Return a deep copy (clone) of the graph. + +Each node in the graph contains a value (int) and a list (List[Node]) of its neighbors. + +class Node { + public int val; + public List neighbors; +} + + +Test case format: + +For simplicity, each node's value is the same as the node's index (1-indexed). For example, the first node with val == 1, the second node with val == 2, and so on. The graph is represented in the test case using an adjacency list. + +An adjacency list is a collection of unordered lists used to represent a finite graph. Each list describes the set of neighbors of a node in the graph. + +The given node will always be the first node with val = 1. You must return the copy of the given node as a reference to the cloned graph. + +Input: adjList = [[2,4],[1,3],[2,4],[1,3]] +Output: [[2,4],[1,3],[2,4],[1,3]] +Explanation: There are 4 nodes in the graph. +1st node (val = 1)'s neighbors are 2nd node (val = 2) and 4th node (val = 4). +2nd node (val = 2)'s neighbors are 1st node (val = 1) and 3rd node (val = 3). +3rd node (val = 3)'s neighbors are 2nd node (val = 2) and 4th node (val = 4). +4th node (val = 4)'s neighbors are 1st node (val = 1) and 3rd node (val = 3). \ No newline at end of file diff --git a/leet-code/133-clone-graph/index.js b/leet-code/133-clone-graph/index.js new file mode 100644 index 0000000..ee317ad --- /dev/null +++ b/leet-code/133-clone-graph/index.js @@ -0,0 +1,41 @@ +/** + * // Definition for a _Node. + * function _Node(val, neighbors) { + * this.val = val === undefined ? 0 : val; + * this.neighbors = neighbors === undefined ? [] : neighbors; + * }; + */ + +/** + * @param {_Node} node + * @return {_Node} + */ +var cloneGraph = function(node) { + // handle edge case + if (node === null) return node + // keep track of the node to return + const start = new Node(node.val) + // manage cycle detection by keeping track of which nodes have been visited + const map= new Map(); + // seed the map with the start node + map.set(node, start) + // keep track of nodes to visit + const stack = [node]; + // exhaust the stack + while (stack.length > 0) { + const next = stack.pop(); + // consider each neighbor + for (const neighbor of next.neighbors) { + // identify nodes that have never been visited + if (!map.has(neighbor)) { + // record the node as visited + map.set(neighbor, new Node(neighbor.val)) + // schedule the node to be visited + stack.push(neighbor) + } + // update the cloned node's neighbors + map.get(next).neighbors.push(map.get(neighbor)) + } + } + return start; +}; \ No newline at end of file