[leetcode]Q133Clone Graph

 

 

 

克隆圖記住:一個map一個queue,照葫蘆畫瓢BFSnode

找到一個節點就畫一個對應的新的,用map對應,而後添加鄰居,記錄鄰居到queuespa

public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
        if (node==null) return node;
        UndirectedGraphNode res = new UndirectedGraphNode(node.label);
        Queue<UndirectedGraphNode> queue = new LinkedList<>();
        Map<UndirectedGraphNode,UndirectedGraphNode> map  = new HashMap<>();
        queue.offer(node);
        map.put(node,res);
        while (!queue.isEmpty()){
            UndirectedGraphNode cur = queue.poll();
            List<UndirectedGraphNode> neighbors = cur.neighbors;
            for (UndirectedGraphNode neighbor :
                    neighbors) {
                if (!map.containsKey(neighbor)){
                    UndirectedGraphNode newNode = new UndirectedGraphNode(neighbor.label);
                    queue.offer(neighbor);
                    //在舊圖中每遍歷到一個節點,就在map中給新圖申請一個對應的內存
                    map.put(neighbor,newNode);
                }
                //根據舊圖中的位置爲新圖添加鄰居
                map.get(cur).neighbors.add(map.get(neighbor));
            }
        }
        return res;
    }
相關文章
相關標籤/搜索