一、题目
二、示例
输入:adjList = [[2,4],[1,3],[2,4],[1,3]]
输出:[[2,4],[1,3],[2,4],[1,3]]
解释:
图中有 4 个节点。
节点 1 的值是 1,它有两个邻居:节点 2 和 4 。
节点 2 的值是 2,它有两个邻居:节点 1 和 3 。
节点 3 的值是 3,它有两个邻居:节点 2 和 4 。
节点 4 的值是 4,它有两个邻居:节点 1 和 3 。
输入:adjList = [[]]
输出:[[]]
解释:输入包含一个空列表。该图仅仅只有一个值为 1 的节点,它没有任何邻居。
输入:adjList = []
输出:[]
解释:这个图是空的,它不含任何节点。
输入:adjList = [[2],[1]]
输出:[[2],[1]]
三、思路
本题采用图的深度优先遍历,然后对全部的当前访问的图节点进行克隆,并且将其放入map中。然后遍历该节点相邻的每一个节点,然后判断该节点是否访问过,如果没有访问,则使用深度优先遍历进行访问,如果访问过,则将其插入当前节点的克隆节点的neighbors
中。
四、代码
/**
* // 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) {
let map = new Map()
if(!node) return
const dfs = (node) => {
map.set(node, new Node(node.val))
node.neighbors.forEach(item => {
if(!map.has(item)) {
dfs(item)
}
map.get(node).neighbors.push(map.get(item))
})
}
dfs(node)
return map.get(node)
};
五、总结
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123427093
内容来源于网络,如有侵权,请联系作者删除!