您的位置:首页 > 其它

LeetCode 133: Clone Graph

2016-06-07 12:41 417 查看

LeetCode 133: Clone Graph

思路

需要考虑自环和两个节点有多条边的特殊情况,这种情况下,不能生成新的节点,而是引用已有节点;

利用Hashtable记录已经存放的节点;

代码

import java.util.Hashtable;
public class Solution {
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {

if (node == null) return null;
UndirectedGraphNode begin = new UndirectedGraphNode(node.label);

Queue<UndirectedGraphNode> oldQueue = new LinkedList<UndirectedGraphNode>();
Queue<UndirectedGraphNode> copyQueue = new LinkedList<UndirectedGraphNode>();
oldQueue.add(node);
copyQueue.add(begin);

Hashtable<Integer, UndirectedGraphNode> hashtable = new Hashtable<Integer, UndirectedGraphNode>();
hashtable.put(node.label, begin);

while(!oldQueue.isEmpty()) {
UndirectedGraphNode old = oldQueue.remove();
UndirectedGraphNode copy = copyQueue.remove();

for (UndirectedGraphNode tmp : old.neighbors) {
if (hashtable.containsKey(tmp.label)) { //already existed
copy.neighbors.add(hashtable.get(tmp.label));
} else { //not existed
UndirectedGraphNode n = new UndirectedGraphNode(tmp.label);
copy.neighbors.add(n);
hashtable.put(tmp.label, n);
oldQueue.add(tmp);
copyQueue.add(n);
}
}
}
return begin;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode hashtable