Leetcode刷题(第133题)——克隆图

x33g5p2x  于2022-03-11 转载在 其他  
字(0.9k)|赞(0)|评价(0)|浏览(180)

一、题目

二、示例

输入: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)
};

五、总结

相关文章

微信公众号

最新文章

更多