LeetCode Clone Graph
2015-03-20 18:23
295 查看
After I realizing that if I take an interview, I will need to discuss the problem in English, I begin to describe all my answers in English. And I hope this will also improve my written ability.
Description:
Given a graph, and we need to clone the whole graph, including an integer variable and an arraylist variable, referring to other nodes in the graph.
Method:
This problem is very similar to the cloned list with random index.
We can use a hashmap to get all the old nodes to map to the new nodes. Then we use a bfs to copy all the neighbour-relatioships.
ps. At first, I used a system stack and a stack overflow happens. So we have to write a stack on our own or simply using a queue.
Description:
Given a graph, and we need to clone the whole graph, including an integer variable and an arraylist variable, referring to other nodes in the graph.
Method:
This problem is very similar to the cloned list with random index.
We can use a hashmap to get all the old nodes to map to the new nodes. Then we use a bfs to copy all the neighbour-relatioships.
ps. At first, I used a system stack and a stack overflow happens. So we have to write a stack on our own or simply using a queue.
import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class Solution { public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if (node == null) return null; // bfs HashMap<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<UndirectedGraphNode, UndirectedGraphNode>(); HashSet<Integer> visit = new HashSet<Integer>(); LinkedList<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>(); Iterator<UndirectedGraphNode> ite; queue.add(node); UndirectedGraphNode temp, neigh; while (!queue.isEmpty()) { temp = queue.poll(); if (visit.contains(temp.label)) continue; visit.add(temp.label); map.put(temp, new UndirectedGraphNode(temp.label)); ite = temp.neighbors.iterator(); while (ite.hasNext()) { queue.add(ite.next()); } } queue.add(node); visit.clear(); while (!queue.isEmpty()) { temp = queue.poll(); if (visit.contains(temp.label)) continue; visit.add(temp.label); ite = temp.neighbors.iterator(); map.get(temp).neighbors = new ArrayList<UndirectedGraphNode>(); while (ite.hasNext()) { neigh = ite.next(); map.get(temp).neighbors.add(map.get(neigh)); if (!visit.contains(neigh.label)) queue.add(neigh); } } return map.get(node); } }
相关文章推荐
- 【leetcode】Clone Graph
- Clone Graph -- leetcode
- LeetCode题解:Clone Graph
- Clone Graph - LeetCode
- 【Leetcode】Clone Graph
- leetcode第一刷_Clone Graph
- leetCode_Clone Graph
- [leetcode] Clone Graph
- [leetcode]Clone Graph
- Leetcode: Clone Graph
- [LeetCode]Clone Graph
- Leetcode-133. Clone Graph
- [LeetCode] CLone Graph
- Leetcode 133. Clone Graph
- LeetCode133—Clone Graph
- [week 18][Leetcode] Clone Graph
- Leetcode Clone Graph
- [LeetCode]: 133: Clone Graph
- LeetCode 133 Clone Graph
- leetcode---Clone Graph