解题思路:

这道题目,一开始看了几遍都没看懂题意,后来找网上的答案才明白是要干啥。其实就是做一次深拷贝的实现。也是比较典型的深度优先搜索问题。

使用C++中的unordered_map<Node*, Node*> 来克隆节点,在访问Node时,先判断是否已经对该节点做过克隆,如果有,则直接返回该克隆节点即可,如果没有,则执行程序,克隆该节点:包括val值和neighbors,在克隆其neighbors时,可能会遇到未克隆的节点,所以需要递归调用克隆函数。

/*
// Definition for a Node.
class Node {
public:int val;vector<Node*> neighbors;Node() {}Node(int _val, vector<Node*> _neighbors) {val = _val;neighbors = _neighbors;}
};
*/
class Solution {
public:Node* cloneGraph(Node* node) {unordered_map<Node*, Node*> mp;return dfs(node, mp);}Node* dfs(Node* node, unordered_map<Node*, Node*>& mp){if(!node) return NULL;if(mp.count(node)) return mp[node];Node* tmp = new Node(node->val);mp[node] = tmp;for(Node* neighbor: node->neighbors){tmp->neighbors.push_back(dfs(neighbor, mp));}return tmp;}
};

Leetcode 133. 克隆图 解题思路及C++实现相关推荐

  1. Leetcode 133.克隆图

    Time: 20190903 Type: Medium 题目描述 给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆).图中的每个节点都包含它的值 val(Int) 和其邻居的列表(list[No ...

  2. leetcode —— 133. 克隆图

    给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆). 图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node]). class Node { public i ...

  3. LeetCode 133. 克隆图(图的BFS/DFS)

    1. 题目 给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆).图中的每个节点都包含它的值 val(Int) 和其邻居的列表(list[Node]). class Node {public:in ...

  4. 力扣133. 克隆图

    该题克隆图类似二叉树的遍历,是从根节点遍历叶节点. 复制思路:是dfs遍历原节点node,建立HashMap<Node,Node>原节点到克隆节点的映射,然后根据原节点,new出新节点,建 ...

  5. LeetCode JAVA语言全部解题思路+答案代码+多种解法+关键注释(持续更新...)

    第一题: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...

  6. Leetcode 344. 反转字符串 解题思路及C++实现

    解题思路: 直接将第 i 个字符 与 第 n-1-i 个字符交换,就可以了. class Solution { public:void reverseString(vector<char> ...

  7. Leetcode 223. 矩形面积 解题思路及C++实现

    解题思路: 着重研究一下矩形四个顶点坐标的大小关系. if 条件语句中判断是否出现不重叠的情况. 当出现重叠时,需要找出重叠矩形的四个顶点坐标:在小的横坐标中找出更大者,就是重叠矩形中较大的横坐标值 ...

  8. Leetcode 206. 反转链表 解题思路及C++实现

    解题思路: 利用三个指针 left.right.tmp.left指向的是每一步反转之后的头结点,right指向的是当前需要反转的节点,tmp指向的是下一步需要反转的节点. /*** Definitio ...

  9. Leetcode 160. 相交链表 解题思路及C++实现

    解题思路: 先将两个链表构建成一个环,定义两个快慢指针,当它们相遇时,将fast指针从头结点往后遍历,每次走一步,当这两个指针再次相遇时,该节点就是相交节点. /*** Definition for ...

最新文章

  1. 成功解决 Exception: URL fetch failure on https://s3.amazonaws.com/img-datasets/mnist.npz: None -- [Errno
  2. android ptrace注入
  3. C#中Tuple的使用
  4. java多线程并行执行命令_深入理解Java多线程与并发框(第④篇)——重排序、屏障指令、as-if-serial规则...
  5. java 广告插件_徒手创建一个chrome扩展-屏蔽广告插件
  6. pb模型文件与.pbtxt配置不匹配导致OpenCV调用dnn模块出错(Mask R-CNN为例)
  7. dwg如何转换成pdf,cad快速转pdf
  8. PS学习笔记(一):基础知识
  9. 【问题记录】git报错:[remote rejected] (pre-receive hook declined)
  10. linux 搜索s开头的文件,Linux文件查找/内容搜索命令
  11. Win10 20H1使用第三方应用重命名虚拟桌面
  12. python累乘怎么写_python实现累乘multi函数(函数参数不限)
  13. JAVA 处理带AM 或 PM的时间
  14. 为什么用线程池?解释下线程池参数? -- Java面试
  15. ArcGIS之经纬度表格数据转矢量
  16. python 主力资金_Python+Tushare 获取个股资金流向
  17. 各种靠谱教程总结(后续更新)
  18. 数据处理-18.数据采集渠道
  19. 网易实习生算法组编程题二:求数组的两个子数组和的最大值
  20. 【Java学习之代码学习】 Prog25_求闰年个数的问题

热门文章

  1. 爬取音乐排行_TapTap排行榜数据大盘点
  2. jrebel热部署不起作用_5种SpringBoot热部署方式,你用哪种?
  3. Apache 2配置域名绑定的步骤
  4. Linux性能监测工具Nmon介绍及其使用
  5. app每次更新版本时调用js代码提示用户下载更新
  6. 【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】...
  7. oracle手动启动服务
  8. 安装phpredis扩展以及phpRedisAdmin工具
  9. 对齐内容验证码和图片
  10. 运动,由Silverlight助力 / Sports, Powered by Silverlight