DFS O(n) time O(n) space
这道题一定要preorder先cache再递归,因为有可能存在环
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
|
class Solution { public: Node* cloneGraph(Node* node) { if (!node) return node; if (nodes.count(node)) return nodes[node]; auto res = new Node; nodes[node] = res; res->val = node->val; for (auto n : node->neighbors) { res->neighbors.push_back(cloneGraph(n)); } return res; }
unordered_map<Node *, Node *> nodes; };
|
BFS
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
|
class Solution { public: Node* cloneGraph(Node* node) { if (!node) return node; unordered_map<Node *, Node *> nodes{{node, new Node(node->val, {})}}; queue<Node *> q{{node}}; while (!q.empty()) { auto x = q.front(); q.pop(); for (auto n : x->neighbors) { if (!nodes.count(n)) { nodes[n] = new Node(n->val, {}); q.push(n); } nodes[x]->neighbors.push_back(nodes[n]); } } return nodes[node]; } };
|