图
克隆图(leetcode - 133)
给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。
思路
- 拷贝所有节点
- 拷贝所有边
步骤
- 深度或者广度优先遍历所有节点
- 拷贝所有节点,存储起来
- 将拷贝的节点,按照原图的连接方式进行连接
深度优先遍历
/**
* @param {Node} node
* @return {Node}
*/
var cloneGraph = function(node) {
if(!node) return;
const map = new Map()
const bfs = (node) => {
const nCopy = new Node(node.val);
map.set(node, nCopy);
(node.neighbors || []).forEach(n => {
if(!map.has(n)) {
bfs(n)
}
nCopy.neighbors.push(map.get(n))
})
}
bfs(node)
return map.get(node)
};
时间复杂度:O(n)
空间复杂度:O(n)
广度优先遍历
var cloneGraph = function(node) {
if(!node) return;
const map = new Map()
const q = [node]
map.set(node, new Node(node.val))
while(q.length) {
const n = q.shift();
(n.neighbors || []).forEach(c => {
if(!map.has(c)) {
q.push(c)
map.set(c, new Node(c.val))
}
map.get(n).neighbors.push(map.get(c))
})
}
return map.get(node)
};
时间复杂度:O(n)
空间复杂度:O(n)
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦