Leetcode 133. Clone Graph

屏幕快照 2017-10-21 下午1.59.01.png

题意:克隆一个无向图。

思路:
因为是克隆所以需要一个map来存储克隆的映射关系,我们可以从给定的第一个节点向它的neighbor一直搜索下去。
如果map的key中有节点,那么搜索直接返回map的value;
如果key中还没有这个节点,那么新建一个节点,并把这对映射关系存入map,然后继续向neighbor搜索下去。

public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
    if (node == null) {
        return node;
    }

    HashMap<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<>();

    return cloneHelper(node, map);
}

private UndirectedGraphNode cloneHelper(UndirectedGraphNode node, HashMap<UndirectedGraphNode, UndirectedGraphNode> map) {
    if (map.containsKey(node)) {
        return map.get(node);
    }

    UndirectedGraphNode cloneNode = new UndirectedGraphNode(node.label);
    map.put(node, cloneNode);
    for (UndirectedGraphNode neighbor : node.neighbors) {
        cloneNode.neighbors.add(cloneHelper(neighbor, map));
    }

    return cloneNode;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原题 克隆一张无向图,图中的每个节点包含一个 label 和一个表 neighbors。你的程序需要返回一个经过深...
    Jason_Yuan阅读 1,700评论 0 0
  • Clone an undirected graph. Each node in the graph contain...
    stevewang阅读 540评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,982评论 19 139
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,524评论 0 3
  • 富悦青年公寓强势入驻郑州高新区,首批房源选址正弘高新数码港三期WE+空间,🏡郑州首个互联网+公寓楼,独门独户,尽享...
    富悦公寓阅读 388评论 0 0