Skip to content

Commit 8c219da

Browse files
committed
Clone Graph: AC
1 parent 991bd54 commit 8c219da

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package leetcode.medium.page2;
2+
3+
import java.util.*;
4+
5+
public class CloneGraph {
6+
static class Node {
7+
public int val;
8+
public List<Node> neighbors;
9+
10+
public Node() {
11+
val = 0;
12+
neighbors = new ArrayList<Node>();
13+
}
14+
15+
public Node(int _val) {
16+
val = _val;
17+
neighbors = new ArrayList<Node>();
18+
}
19+
20+
public Node(int _val, ArrayList<Node> _neighbors) {
21+
val = _val;
22+
neighbors = _neighbors;
23+
}
24+
}
25+
26+
public Node cloneGraph(Node node) {
27+
if (node == null) {
28+
return null;
29+
}
30+
31+
Map<Node, Node> visited = new HashMap<>();
32+
Queue<Node> queue = new LinkedList<>();
33+
queue.offer(node);
34+
Node res = new Node(node.val);
35+
visited.put(node, res);
36+
37+
while (!queue.isEmpty()) {
38+
Node oldNode = queue.poll();
39+
Node newNode = visited.getOrDefault(oldNode, new Node(oldNode.val));
40+
41+
for (Node oldSubNode : oldNode.neighbors) {
42+
Node newSubNode = null;
43+
if (visited.containsKey(oldSubNode)) {
44+
newSubNode = visited.get(oldSubNode);
45+
} else {
46+
queue.offer(oldSubNode);
47+
newSubNode = new Node(oldSubNode.val);
48+
visited.put(oldSubNode, newSubNode);
49+
}
50+
newNode.neighbors.add(newSubNode);
51+
}
52+
}
53+
54+
return res;
55+
}
56+
}

LeetCodePrj/Java/leetcode/medium/page2/MediumPage2.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package leetcode.medium.page2;
22

33
import leetcode.common.ListNode;
4-
import leetcode.hard.page2.LFUCache;
54
import org.junit.jupiter.api.Test;
65

6+
import java.util.ArrayList;
7+
78
public class MediumPage2 {
89
@Test
910
public void testSortList() {
@@ -23,4 +24,12 @@ public void testEvalRPN() {
2324
EvaluateReversePolishNotation evalRPN = new EvaluateReversePolishNotation();
2425
System.out.println(evalRPN.evalRPN(input));
2526
}
27+
28+
@Test
29+
public void testCloneMap() {
30+
CloneGraph.Node node = new CloneGraph.Node();
31+
node.neighbors = new ArrayList<>();
32+
CloneGraph cloneGraph = new CloneGraph();
33+
System.out.println(cloneGraph.cloneGraph(node));
34+
}
2635
}

0 commit comments

Comments
 (0)