LC 133图论中等第 93 / 95 题

克隆图

Clone Graph

哈希表DFSBFS
本机进度仅保存在当前浏览器

题目描述

给你一个无向连通图中一个节点的引用,请你返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val 和其邻居的列表 neighbors。

示例:邻接表 [[2, 4], [1, 3], [2, 4], [1, 3]] 克隆后结构一致。

解题思路

  1. 图的克隆难点在"环":直接递归会无限循环。用哈希表记录「原节点 -> 克隆节点」,兼作访问标记。
  2. DFS:当前节点不在表中就先创建克隆并登记(先登记再递归,防止成环时重复创建),再递归克隆邻居列表。
  3. BFS 版本用队列同样以映射表去重,两个方向都可以,重点是"先建映射再建边"。

参考实现

查看参考实现Python · 建议先自行作答
def cloneGraph(node):
    if not node:
        return None
    clones = {}  # 原节点 -> 克隆节点

    def dfs(cur):
        if cur in clones:
            return clones[cur]
        copy = Node(cur.val)
        clones[cur] = copy  # 先登记再递归,防止环内重复创建
        for nb in cur.neighbors:
            copy.neighbors.append(dfs(nb))
        return copy

    return dfs(node)

复杂度与归属

时间复杂度O(V + E)
空间复杂度O(V)
所属分类图论
题源LeetCode 133

关联教程

返回题图鉴