`
ouqi
  • 浏览: 41344 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

[leetcode]Clone Graph

 
阅读更多

看到克隆图,自然想到遍历所有节点的算法,DFS/BFS改造下就可以了

本题中map用来保存已复制的节点(关系没有复制),同时也起到一个标记节点已访问过的作用。

 /**
 * Definition for undirected graph.
 * class UndirectedGraphNode {
 *     int label;
 *     ArrayList<UndirectedGraphNode> neighbors;
 *     UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); }
 * };
 */

public class Solution {
    private HashMap<UndirectedGraphNode,UndirectedGraphNode> map = new HashMap<UndirectedGraphNode,UndirectedGraphNode>();//已复制过的节点
    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        map.clear();
        return clone(node);
    }
    //dfs
     public UndirectedGraphNode clone(UndirectedGraphNode node){
         if(node == null) return null;
         UndirectedGraphNode clonedNode =  new UndirectedGraphNode(node.label);
         map.put(node,clonedNode);
         if(node.neighbors == null||node.neighbors.size() == 0) {
             return clonedNode;
         }
         for(UndirectedGraphNode unode:node.neighbors){
             UndirectedGraphNode cloned = map.get(unode);
             if(cloned == null){
               UndirectedGraphNode cloneNeighborNode = clone(unode);
               clonedNode.neighbors.add(cloneNeighborNode);
             }else{
                 clonedNode.neighbors.add(cloned);
             }
             
         }
       
         return clonedNode;
         
     }
    
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics