133. Clone Graph
Tags:
Medium
Skills:
Graph
June 24, 2025
04:32 AM
No headings found
Loading content...
Related Posts
Leetcode
No headings found
Related Posts
Leetcode
Problem
Bài toán yêu cầu bạn tạo ra một bản sao sâu (Deep copy) của một đồ thị vô hướng, liên thông, trong đó mỗi node có một giá trị và một danh sách các node neighbors. Khi clone, bạn phải đảm bảo mỗi node và mỗi cạnh đều là bản sao mới không dùng chung references với original graph
Phân tích và hướng tiếp cận
Map<Node, Node>Các bước giải bằng DFS
Time and space complexity
Với:
Solution
1/**
2 * Definition for _Node.
3 * class _Node {
4 * val: number
5 * neighbors: _Node[]
6 *
7 * constructor(val?: number, neighbors?: _Node[]) {
8 * this.val = (val===undefined ? 0 : val)
9 * this.neighbors = (neighbors===undefined ? [] : neighbors)
10 * }
11 * }
12 *
13 */
14
15function cloneGraph(node: _Node | null): _Node | null {
16 const map: Map<_Node, _Node> = new Map();
17
18 function dfs(curr: _Node | null): _Node | null {
19 if(!curr) return null;
20 if(map.has(curr)) return map.get(curr);
21
22 const clone = new Node(curr.val);
23 map.set(curr, clone);
24
25 for(const neighbor of curr.neighbors) {
26 clone.neighbors.push(dfs(neighbor));
27 }
28
29 return clone;
30 }
31
32 return dfs(node);
33};dfs vừa duyệt vừa clone, đảm bảo mỗi node chỉ clone một lần và các cạnh được giữ đúng cấu trúc gốcmap giúp tránh clone lặp và xử lý được chu trình trong đồ thị→ Nhờ vậy, mỗi node chỉ được clone đúng một lần, và chương trình không bị rơi vào vòng lặp vô hạn khi duyệt đồ thị có chu trình.