[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;
         
     }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值