解题步骤:
①深度或广度优先遍历所有节点;
②拷贝所有节点,存储起来;
③将拷贝的节点,按照原图的连接方法进行连接。
首先是判断node,不符合条件直接返回即可,不用浪费时间。
然后再书写完整的深度优先遍历的过程,随后需要拷贝节点并存储。拷贝的时候比较简单,只要用
const nCopy=new Node(n.val)
就可以了,现在不传入neighbors会自动变成一个空数组。存储可以巧妙地和原节点的遍历形成一个映射,将visited新建的Set改成Map,然后让n对应nCopy即可,至此完成了节点的拷贝和存储。
接下来是拷贝边。
nCopy的neighbors和原节点对应上即可。
最后返回拷贝到的克隆图,也是获取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;}
c