-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLeetCode133.cpp
More file actions
56 lines (55 loc) · 1.16 KB
/
LeetCode133.cpp
File metadata and controls
56 lines (55 loc) · 1.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> neighbors;
Node() {
val = 0;
neighbors = vector<Node*>();
}
Node(int _val) {
val = _val;
neighbors = vector<Node*>();
}
Node(int _val, vector<Node*> _neighbors) {
val = _val;
neighbors = _neighbors;
}
};
*/
class Solution
{
public:
Node *dfs(Node *cur, unordered_map<Node *, Node *> &m)
{
vector<Node *> neighbor;
Node *clone = new Node(cur->val);
m[cur] = clone;
for (auto it : cur->neighbors)
{
if (m.find(it) != m.end())
{
neighbor.push_back(m[it]);
}
else
{
neighbor.push_back(dfs(it, m));
}
}
clone->neighbors = neighbor;
return clone;
}
Node *cloneGraph(Node *node)
{
unordered_map<Node *, Node *> m;
if (node == nullptr)
return nullptr;
if (node->neighbors.size() == 0)
{
Node *clone = new Node(node->val);
return clone;
}
return dfs(node, m);
}
};