克隆图

题目:克隆图

问题描述:

给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。

图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。

class Node {
    public int val;
    public List<Node> neighbors;
}

解决思路:

经过分析,此问题可分为3种情况来解决:
1、如果 node 为空,则直接返回。
2、如果 node 已经存在于用于存储已克隆节点的 map 中,那么也直接返回。
3、按照2的逻辑,如果 node 不存在于 map 中,那么根据当前 node 创建新的克隆节点,并且根据 DFS 遍历 node 的邻接列表加入到新创建克隆节点的邻接列表中。

解决代码:


class Solution {
    private Map<Integer, Node> visitedMap = new HashMap<>();

    public Node cloneGraph(Node node) {
        // 1.
        if(node == null) {
            return null;
        }

        // 2.
        Node clone = visitedMap.get(node.val);
        if(clone != null) {
            return clone;
        }

        // 3.
        clone = new Node(node.val);
        visitedMap.put(node.val, clone);
        for(Node neighborNode : node.neighbors) {
            clone.neighbors.add(cloneGraph(neighborNode));
        }

        return clone;
    }
}

原文地址:https://www.cnblogs.com/syhyfh/p/13253486.html