深度优先遍历:
/**
* // 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)
}