zoukankan      html  css  js  c++  java
  • LeetCode 133 克隆图

    Leetcode 133 克隆图

    给定一个无向图,要求给出该无向图的深克隆图(所谓深克隆是指克隆图中的每个节点都要是区别于旧图对应节点的新节点)
    方法: 需要对给定的无向图进行遍历(DFS/BFS),遍历过程中对每个节点进行克隆并建立图(节点间串联)
    BFS

    class Solution {
        public Node cloneGraph(Node node) {
            if (node == null) return null;
            //保存原图(old)已遍历节点、到克隆图(new)的节点映射
            Map<Node, Node> oldToNew = new HashMap<>();
            Node clone = new Node(node.val, new ArrayList<>());
            oldToNew.put(node, clone);
            Deque<Node> queue = new LinkedList<>();
            queue.offer(node);
            while (!queue.isEmpty()) {
                Node tmp = queue.poll();
                //遍历并复制原图tmp节点及其next节点
                for (Node n : tmp.neighbors) {
                    //避免重复遍历原图节点
                    if (!oldToNew.containsKey(n)) {
                        //添加原图未遍历节点、克隆图复制节点
                        oldToNew.put(n, new Node(n.val, new ArrayList<>()));
                        queue.offer(n);
                    }
                    //添加next node(克隆图节点串联)
                    oldToNew.get(tmp).neighbors.add(lookup.get(n));
                }
            }
            return clone;
        }
    }
    

    DFS

    class Solution {
        private HashMap <Node, Node> visited = new HashMap <> ();
        public Node cloneGraph(Node node) {
            if (node == null) {
                return node;
            }
    
            // 如果该节点已经被访问过了,则直接从哈希表中取出对应的克隆节点返回
            if (visited.containsKey(node)) {
                return visited.get(node);
            }
    
            // 克隆节点,注意到为了深拷贝我们不会克隆它的邻居的列表
            Node cloneNode = new Node(node.val, new ArrayList());
            // 哈希表存储
            visited.put(node, cloneNode);
    
            // 遍历该节点的邻居并更新克隆节点的邻居列表
            for (Node neighbor: node.neighbors) {
                cloneNode.neighbors.add(cloneGraph(neighbor));
            }
            return cloneNode;
        }
    }
    
  • 相关阅读:
    vue.js加入购物车小球动画
    商品数量编辑按钮3D效果动画
    box-sizing 属性
    Vue中better-scroll插件的使用
    显示从右滑进,隐藏向左滑出效果
    设置宽高等比的盒子
    star组件
    添加模糊效果demo
    c# SSH ,SFTP
    WPF 嵌入winform 控件
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13488805.html
Copyright © 2011-2022 走看看