美文网首页
Leetcode133克隆图

Leetcode133克隆图

作者: answerLDA | 来源:发表于2019-12-19 23:36 被阅读0次

题目

给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 valInt) 和其邻居的列表(list[Node])。
示例:

输入:

{"$id":"1","neighbors":[{"$id":"2","neighbors":[{"$ref":"1"},{"$id":"3","neighbors":[{"$ref":"2"},{"$id":"4","neighbors":[{"$ref":"3"},{"$ref":"1"}],"val":4}],"val":3}],"val":2},{"$ref":"4"}],"val":1}

解释:

节点 1 的值是 1,它有两个邻居:节点 2 和 4 。
节点 2 的值是 2,它有两个邻居:节点 1 和 3 。
节点 3 的值是 3,它有两个邻居:节点 2 和 4 。
节点 4 的值是 4,它有两个邻居:节点 1 和 3 。

思路及代码

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> neighbors;

    public Node() {}

    public Node(int _val,List<Node> _neighbors) {
        val = _val;
        neighbors = _neighbors;
    }
};
*/
class Solution {
    public Node cloneGraph(Node node) {
        if(node == null){
            return null;
        }
        //用来记录所有的节点情况
        Map<Integer,Node> map = new HashMap<>();
        //首先建立根节点
        int rootVal = node.val;
        Node root = new Node(rootVal,new ArrayList<Node>());
        map.put(rootVal,root);
        //在根节点利用深度优先算法去构建一棵树
        copyNeighbors(node,map);
        return root;
    }

    public void copyNeighbors(Node root,Map<Integer,Node> map){
        //获取复制后的当前节点
        Node r = map.get(root.val);
        //遍历他的邻居节点
        for(Node node:root.neighbors){
            //如果邻居节点已经被构建过,证明此节点之前已经被遍历和复制了,只需要放在其邻居的列表中即可
            //如果没有被构建则需要复制构建一次,加入索引的map中,并先对他进行邻居节点的复制
            Node c = map.get(node.val);
            if(c==null){
                c = new Node(node.val,new ArrayList<Node>());
                map.put(node.val,c);
                copyNeighbors(node,map);
            }
            r.neighbors.add(c);
        }
    }
}

相关文章

  • Leetcode133克隆图

    题目 给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val(Int) 和其...

  • 克隆图

    给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val(Int) 和其邻居的...

  • 克隆图

    给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val(Int) 和其邻居的...

  • 大连滕泰科技学习笔记2020-06-08

    1,项目组8 1,1 什么是深克隆?1,2 深克隆的内存图?1,3 深克隆案例1,4 深克隆解决问题的核心思想?原...

  • Tomcat启动时序图

    本人整理的Tomcat启动时序图,有需要原图的可以登录ProcessOn进行克隆,克隆地址为:https://ww...

  • 深入理解Tomcat

    本人整理的深入理解Tomcat思维导图,有需要原图的可以登录ProcessOn进行克隆,克隆地址为:https:/...

  • LeetCode-133-克隆图

    克隆图 题目描述:给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 ...

  • 在Ubuntu上手动安装vim插件(以NERDTree为例)

    一、克隆插件 vim的插件去GitHub下载。 1.找到克隆地址   先进入GitHub首页(图1),在右上角搜索...

  • 并发编程知识脑图(持续更新中...)

    本人整理的并发编程相关的思维导图,有需要原图的可以登录ProcessOn进行克隆,克隆地址为:https://ww...

  • 克隆无向图

网友评论

      本文标题:Leetcode133克隆图

      本文链接:https://www.haomeiwen.com/subject/yntbnctx.html