Crack LeetCode 之 133. Clone Graph
阿新 • • 發佈:2018-12-16
Leetcode link: https://leetcode.com/problems/clone-graph/
本題要求克隆一個圖。這裡需要的注意的是,每個節點的相鄰節點可能有重複,所以需要一個map檢查重複節點。另外,本題還有兩個解法:深度優先遍歷和廣度優先遍歷。可以參考https://blog.csdn.net/linhuanmars/article/details/22715747,從這個連結我們可以看到廣度優先和深度優先的遍歷區別在於,前者用佇列做資料結構,後者用棧做資料結構。我比較喜歡本體的遞迴實現,很簡潔。
以下是C++程式碼,空間複雜度是O(n),時間複雜度也是O(n)。
class Solution { map<UndirectedGraphNode *, UndirectedGraphNode *> m_map; public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if (node == NULL) return NULL; UndirectedGraphNode * result = new UndirectedGraphNode(node->label); m_map[node] = result; for (int i=0; i<node->neighbors.size(); ++i) result->neighbors.push_back( m_map[node->neighbors[i]]? m_map[node->neighbors[i]]: cloneGraph(node->neighbors[i]) ); return result; } };