[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;

        }

    }

}

  

你可能感兴趣的:(LeetCode)