还是一道要求完全克隆的题目.....重点是要将所有点找出并克隆病完整保存点和点间的关系
思路一:实现找出并新建立所有的点存入map,之后再次遍历建立关系
看了下网上的方法,思路二很好.....用map保存新建立即已克隆的点...从node开始逐个点克隆...若该点已克隆,则直接取出克隆点,否则克隆...之后要判断该点的邻点继续克隆直到结束
/**
* Definition for undirected graph.
* class UndirectedGraphNode {
* int label;
* List<UndirectedGraphNode> neighbors;
* UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); }
* };
*/
public class Solution {
Map<Integer,UndirectedGraphNode> nodes = new HashMap<Integer,UndirectedGraphNode>();
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
return clone(node);
}
UndirectedGraphNode clone(UndirectedGraphNode node){
if(node == null)
{
return null;
}
if(nodes.containsKey(node.label))
{
return nodes.get(node.label);
}
UndirectedGraphNode tempNode = new UndirectedGraphNode(node.label);
nodes.put(node.label,tempNode);
for(UndirectedGraphNode n : node.neighbors)
{
UndirectedGraphNode Newn = clone(n);
tempNode.neighbors.add(Newn);
}
return tempNode;
}
}