深度优先遍历:
/** * // 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) { if (!node) return const visited = new Map() const dfs = (n) => { const nCopy = new Node(n.val) visited.set(n, nCopy) ;(n.neighbors || []).forEach(ne => { // 注意这里要加分号,防止理解为set()() if (!visited.has(ne)) { dfs(ne) } nCopy.neighbors.push(visited.get(ne)) // 因为先dfs(ne)了,所以这里肯定能get到ne }) } dfs(node) return visited.get(node) };广度优先遍历:
/** * // 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) { if (!node) return const visited = new Map() const nCopy = new Node(node.val) visited.set(node, nCopy) const q = [node] while (q.length) { const n = q.shift() ;(n.neighbors || []).forEach(ne => { if (!visited.has(ne)) { q.push(ne) const nCopy = new Node(ne.val) visited.set(ne, nCopy) } visited.get(n).neighbors.push(visited.get(ne)) }) } return visited.get(node) }