【LeetCode 面试经典150题】133. Clone Graph 克隆图

本文介绍了一种使用深度优先搜索(DFS)和哈希表的方法,如何在给定一个连接的无向图节点引用时,创建一个该图的深度拷贝。通过遍历原图节点并创建映射,确保新图中节点及其邻居结构的一致性。
摘要由CSDN通过智能技术生成

133. Clone Graph(克隆图)

题目大意

Given a reference of a node in a connected undirected graph.

Return a deep copy (clone) of the graph.

Each node in the graph contains a value (int) and a list (List[Node]) of its neighbors.

中文释义

给定一个在连接的无向图中的节点的引用。

返回这个图的深度拷贝(克隆)。

图中的每个节点包含一个值(int)和一个邻居节点列表(List[Node])。

示例

  • 示例 1:
    • 输入:adjList = [[2,4],[1,3],[2,4],[1,3]]
    • 输出:[[2,4],[1,3],[2,4],[1,3]]
    • 解释:图中有 4 个节点。
      第 1 个节点(val = 1)的邻居是第 2 个节点(val = 2)和第 4 个节点(val = 4)。
      第 2 个节点(val = 2)的邻居是第 1 个节点(val = 1)和第 3 个节点(val = 3)。
      第 3 个节点(val = 3)的邻居是第 2 个节点(val = 2)和第 4 个节点(val = 4)。
      第 4 个节点(val = 4)的邻居是第 1 个节点(val = 1)和第 3 个节点(val = 3)。
  • 示例 2:
    • 输入:adjList = [[]]
    • 输出:[[]]
    • 解释:注意输入包含一个空列表。图只包含一个节点 val = 1,它没有任何邻居。
  • 示例 3:
    • 输入:adjList = []
    • 输出:[]
    • 解释:这是一个空图,它没有任何节点。

限制条件

  • 图中的节点数在 [0, 100] 范围内。
  • 1 <= Node.val <= 100
  • 每个节点的 Node.val 是唯一的。
  • 图中没有重复的边和没有自环。
  • 图是连通的,所有节点都可以从给定的节点开始访问。

解题思路

使用深度优先搜索(DFS)和哈希表来解决问题。创建一个哈希表来存储原图中的节点到克隆图中的节点的映射。

步骤说明

  1. 创建一个哈希表 cloneMap 来存储原图节点到克隆图节点的映射。
  2. 遍历原图的每个节点:
    • 如果节点已在 cloneMap 中,则返回对应的克隆节点。
    • 否则,创建一个新的克隆节点并添加到 cloneMap
    • 遍历原节点的邻居,并递归调用克隆函数。
  3. 返回克隆的图的引用。

代码

class Solution {
public:
    unordered_map<Node*, Node*> cloneMap;
    Node* cloneGraph(Node* node) {
        if (!node) return nullptr;
        
        if (cloneMap.find(node) != cloneMap.end()) {
            return cloneMap[node];
        }

        Node* new_node = new Node(node -> val);
        cloneMap[node] = new_node;
        for (auto& neighbor: node -> neighbors) {
            new_node -> neighbors.push_back(cloneGraph(neighbor));
        }
        return new_node;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值