• 克隆图


    Leetcode题目描述

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

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

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

    详细题目描述看一下链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/clone-graph

    深度优先解法

    问题的核心是一致的:避免重复地遍历同一个节点,或者是重复遍历一条路径。可以采用哈希表的方式进行判断,鉴于每一个Node节点哦都是不一致的,作为Hash的Key就不会出现的重复的现象。而Hash的Vuale可以选择被克隆的节点加入。

    • 注意Neighbor是使用List方式进行存储。所以添加邻居节点时,使用List中的add方法直接添加。
    • 注意其中的构造方法,关键在于第三个的构造方法。

    深度优先demo

    /*
    // Definition for a Node.
    class Node {
        public int val;
        public List<Node> neighbors;
        
        public Node() {
            val = 0;
            neighbors = new ArrayList<Node>();
        }
        
        public Node(int _val) {
            val = _val;
            neighbors = new ArrayList<Node>();
        }
        
        public Node(int _val, ArrayList<Node> _neighbors) {
            val = _val;
            neighbors = _neighbors;
        }
    }
    */
    
    class Solution {
        // 创建一个哈希表,key是源节点,Value是克隆节点
        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;
        }
    }
    
  • 相关阅读:
    视频学习网站
    保存文章
    maven常见命令总结
    Eclipse vs IDEA快捷键对比大全(win系统)
    JS调用android逻辑方法
    【原创】不用封装jar包 直接引入工程使用的方法(类似android的 is Library功能)
    windows下eclipse+hadoop2
    Solaris用户管理(一):用户与组管理
    jquery 操作 checkbox
    模拟用户登录的操作
  • 原文地址:https://www.cnblogs.com/Di-iD/p/13784645.html
Copyright © 2020-2023  润新知