Shawngbk / Leecode

Questions of Leecode
0 stars 0 forks source link

133. Clone Graph #167

Open Shawngbk opened 7 years ago

Shawngbk commented 7 years ago

dfs: public class Solution { public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { HashMap<Integer, UndirectedGraphNode> map = new HashMap<Integer, UndirectedGraphNode>(); return dfs(node, map); }

private UndirectedGraphNode dfs(UndirectedGraphNode node, HashMap<Integer, UndirectedGraphNode> map) {
    if(node == null) return null;
    if(map.containsKey(node.label)) {
        return map.get(node.label);
    } else {
        UndirectedGraphNode clone = new UndirectedGraphNode(node.label);
        map.put(node.label, clone);
        for(int i = 0; i < node.neighbors.size(); i++) {
            clone.neighbors.add(dfs(node.neighbors.get(i), map));
        }
        return clone;
    }
}

}


bfs

public class Solution { public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if (node == null) return null;

    UndirectedGraphNode newNode = new UndirectedGraphNode(node.label); //new node for return
    HashMap<Integer, UndirectedGraphNode> map = new HashMap(); //store visited nodes

    map.put(newNode.label, newNode); //add first node to HashMap

    LinkedList<UndirectedGraphNode> queue = new LinkedList(); //to store **original** nodes need to be visited
    queue.add(node); //add first **original** node to queue

    while (!queue.isEmpty()) { //if more nodes need to be visited
        UndirectedGraphNode n = queue.pop(); //search first node in the queue
        for (UndirectedGraphNode neighbor : n.neighbors) {
            if (!map.containsKey(neighbor.label)) { //add to map and queue if this node hasn't been searched before
                map.put(neighbor.label, new UndirectedGraphNode(neighbor.label));
                queue.add(neighbor);
            }
            map.get(n.label).neighbors.add(map.get(neighbor.label)); //add neighbor to new created nodes
        }
    }

    return newNode;
}

}