乐扣等题(133)js--克隆图
解题步骤:
①深度或广度优先遍历所有节点;
②拷贝所有节点,存储起来;
③将拷贝的节点,按照原图的连接方法进行连接。
首先是判断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;}
-
const visited=new Map();
-
const dfs=(n)=> {
-
const nCopy=new Node(n.val)
-
visited.set(n, nCopy);
-
(n.neighbors || []).forEach( c=> {
-
if(!visited.has(c)){
-
dfs(c)
-
}
-
nCopy.neighbors.push(visited.get(c))
-
})
-
}
-
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();
-
visited.set(node, new Node(node.val));
-
const q=[node];
-
while(q.length) {
-
const n=q.shift();
-
(n.neighbors || []).forEach(c=> {
-
if(!visited.has(c)) {
-
q.push(c);
-
visited.set(c, new Node(c.val));
-
}
-
visited.get(n).neighbors.push(visited.get(c))
-
})
-
}
-
return visited.get(node)
-
};
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfeeah
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01