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

    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;
        }
    }
    
  • 相关阅读:
    Jenkins 基础篇
    Jenkins 基础篇
    Windows配置Nodejs环境
    Windows配置安装JDK
    Windows安装MySQL
    Ubuntu安装MySQL
    利用中国移动合彩云实现360云盘迁移到百度云
    Linux Shell下的后台运行及其前台的转换
    nova image-list 和 glance image-list 有什么区别
    启动虚拟机时提示我已移动或我已复制选项的详解
  • 原文地址:https://www.cnblogs.com/Di-iD/p/13784645.html
Copyright © 2011-2022 走看看