题目:
题目截图:
解题步骤:
1.深度或广度优先遍历所有节点
2.拷贝所有的节点,存储起来
3.将拷贝的节点,按照原图的连接方法进行连接
代码:
/**
* // 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) => {
// // console.log(n.val);
// const nCopy = new Node(n.val);
// visited.set(n, nCopy);
// (n.neighbors || []).forEach(ne => {
// if (!visited.has(ne)) dfs(ne);
// nCopy.neighbors.push(visited.get(ne));
// });
// };
// dfs(node);
// return visited.get(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();
// console.log(n.val);
(n.neighbors || []).forEach(ne => {
if (!visited.has(ne)) {
q.push(ne);
visited.set(ne, new Node(ne.val));
}
visited.get(n).neighbors.push(visited.get(ne));
});
}
return visited.get(node);
};
时间复杂度分析:
时间复杂度是O(n),n是图的节点个数
空间复杂度分析:
空间复杂度是O(n)
怎么样,是不是很简单,你学会了吗 ?
如果这篇文章能够帮助到您,希望您不要吝惜点赞👍👍和收藏💖💖,您的支持是我继续努力的动力 💪💪 !!!