图的深度优先遍历做
/**
* // 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}
// 这个字典主要是用来存已经遍历过的图的节点
// 以及存储对应的克隆节点
var visited = new Map()
function dfs(node){
var n = new Node(node.val)
visited.set(node,n)
node.neighbors.forEach( ne => {
if(!visited.has(ne)){
dfs(ne)
}
n.neighbors.push(visited.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}
var visited = new Map()
var p = [node]
visited.set(node,new Node(node.val))
while(p.length){
var n = p.shift()
n.neighbors.forEach(ne => {
if(!visited.has(ne)){
p.push(ne)
visited.set(ne,new Node(ne.val))
}
visited.get(n).neighbors.push(visited.get(ne))
})
}
return visited.get(node)
};