栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2021-10-10 leetcode 数据结构 133.克隆图 DFS 深浅拷贝解释以及区别 C++

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-10 leetcode 数据结构 133.克隆图 DFS 深浅拷贝解释以及区别 C++

题目

解释

核心:深拷贝(本篇blog最后有解释)
建立新的内存,将该图复制到新的内存中

思路

DFS&map
DFS:利用DFS遍历,并复制到新的结构体中

AC代码

class Solution {
private:
    mapvisited;//<原图中的结点,深拷贝图中的结点>
public:
    Node* cloneGraph(Node* node) {
        if(!node) 
            return NULL;
        if(visited.count(node))//若map中包含该结点,则直接返回该结点,避免绕圈
            return visited[node];//最后返回到neighbors中的都是visited[node],即深拷贝的结点
        else{
            Node *cloneNode =new Node(node->val);//创建一个新结点,让cloneNode->val = node->val
            visited[node] = cloneNode;
            for(Node* n : node->neighbors)//遍历node的相邻结点
                cloneNode->neighbors.push_back(cloneGraph(n));//dfs,不断访问相邻结点
            return cloneNode;
        }
    }
};
关于深拷贝和浅拷贝

浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址
深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存。

深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。

eg:对于A,B对A进行浅拷贝,C对A进行深拷贝
现释放A的内存:
B由于指向A的地址,受A影响,随A的释放而释放。
C不受影响。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311870.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号