Algorithms first

克隆图 · 交互式算法学习

深拷贝一个无向连通图。

#133 ·

克隆图

Clone Graph

测试用例adjList = [[2,4],[1,3],[2,4],[1,3]]
树 / 图3 个关键状态
步骤 1节点 1 入队并创建副本。queue=[1]
1234
推荐

BFS + 节点映射

时间 O(V+E)空间 O(V)

队列逐节点创建尚未克隆的邻居并连接。

1function cloneGraph(node) {2  if (!node) return null;3  const map = new Map([4      [node, {5        val: node.val,6        neighbors: []7      }]8    ]),9    q = [node];10  while (q.length) {11    const cur = q.shift();12    for (const n of cur.neighbors) {13      if (!map.has(n)) {14        map.set(n, {15          val: n.val,16          neighbors: []17        });18        q.push(n)19      }20      map.get(cur).neighbors.push(map.get(n));21    }22  }23  return map.get(node);24}
多语言参考

Java · C++ · Go

来源 · CC BY-SA 4.0 ↗

这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。

1/*2// Definition for a Node.3class Node {4    public int val;5    public List<Node> neighbors;6    public Node() {7        val = 0;8        neighbors = new ArrayList<Node>();9    }10    public Node(int _val) {11        val = _val;12        neighbors = new ArrayList<Node>();13    }14    public Node(int _val, ArrayList<Node> _neighbors) {15        val = _val;16        neighbors = _neighbors;17    }18}19*/20 21class Solution {22    private Map<Node, Node> g = new HashMap<>();23 24    public Node cloneGraph(Node node) {25        return dfs(node);26    }27 28    private Node dfs(Node node) {29        if (node == null) {30            return null;31        }32        Node cloned = g.get(node);33        if (cloned == null) {34            cloned = new Node(node.val);35            g.put(node, cloned);36            for (Node nxt : node.neighbors) {37                cloned.neighbors.add(dfs(nxt));38            }39        }40        return cloned;41    }42}
交互式算法学习

从执行步骤真正理解 LeetCode 经典 150

本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。

多形态可视化数组、矩阵、DP 表、递归树、树图、链表、栈队列堆、区间和状态机按解法选择。
动画与代码同步当前状态、步骤说明、变量和代码高亮保持一一对应,可逐步播放和回退。
适合面试复习每种方案都给出思路、时间复杂度、空间复杂度、测试用例和 LeetCode 中文原题入口。
AlgoViz Lab

克隆图 · 解法对比

深拷贝一个无向连通图。

测试用例
adjList = [[2,4],[1,3],[2,4],[1,3]]
题目分类
解法对比
2
方案 1

DFS + 节点映射

首次访问节点时创建副本,再递归克隆邻居。

时间
O(V+E)
空间
O(V)
方案 2

BFS + 节点映射

队列逐节点创建尚未克隆的邻居并连接。

时间
O(V+E)
空间
O(V)