[leetcode]Clone Graph

Clone Graph,采用BFS,同时用一个Map记录原先节点和现在节点的映射,顺便可以用来做visited check。一开始有两个错误,一是null的时候也要返回null,二是有可能节点0也有指向0本身的邻居,所以在对neighbors做遍历前要先放到map里。

public class Solution {
    HashMap<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<UndirectedGraphNode, UndirectedGraphNode>();
    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
        map.clear();
        return cloneNode(node);
    }
    
    private UndirectedGraphNode cloneNode(UndirectedGraphNode node)
    {
        if (node == null) return null;
        if (map.containsKey(node)) return map.get(node);
        else
        {
            UndirectedGraphNode copy = new UndirectedGraphNode(node.label);
            map.put(node, copy);
            for (UndirectedGraphNode n : node.neighbors)
            {
                copy.neighbors.add(cloneNode(n));
            }
            return copy;
        }
    }
}

  

原文地址:https://www.cnblogs.com/lautsie/p/3356392.html