克隆图-133

克隆图

题目:克隆图

    给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。

    图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。

class Node {
    public int val;
    public List<Node> neighbors;
}


输入:[[2,4],[1,3],[2,4],[1,3]]

输出:[[2,4],[1,3],[2,4],[1,3]]

 

题解

/**
     * 1. 复制所有点:BFS
     * 2. 复制所有边:通过遍历映射map
*/

    class Solution {
        public Node cloneGraph(Node node) {
            if(null == node) return null;

            Map<Node, Node> map=new HashMap();
            Queue<Node> queue =new ArrayDeque<>();
            queue.add(node);

            Node temp=null;
            while (!queue.isEmpty())
            {
                temp=queue.poll();
                Node cv=new Node(temp.val);
                map.put(temp, cv);

                for(Node neighber : temp.neighbors)
                {
                    if(map.containsKey(neighber))
                        continue;
                    queue.add(neighber);
                }
            }

           map.forEach((k,v)->{
               for(Node neighber: k.neighbors)
               {
                   v.neighbors.add(map.get(neighber));
               }
           });
            return map.get(node);
        }
    }
posted @ 2021-12-17 12:43  言思宁  阅读(41)  评论(0编辑  收藏  举报