133. Clone Graph

1.問題

  • 給予一個graph

2.想法

  • 提問

  • function header, parameter

  • test input

  • 觀察

    • 這題跟138. Copy List with Random Pointer很像, 用map儲存已經複製過的node, 避免重複拷貝, 重複走訪

  • 說明想法

  • 測試計算複雜度

3.程式碼

/**
 * Definition for undirected graph.
 * struct UndirectedGraphNode {
 *     int label;
 *     vector<UndirectedGraphNode *> neighbors;
 *     UndirectedGraphNode(int x) : label(x) {};
 * };
 */
class Solution {
public:
    UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
        unordered_map<UndirectedGraphNode *, UndirectedGraphNode *> m;
        return getCopyGraph(node, m);
    }
private:
    UndirectedGraphNode * getCopyGraph(UndirectedGraphNode *node, unordered_map<UndirectedGraphNode *, UndirectedGraphNode *>& m) {
        if (!node) {
            return NULL;
        }
        
        if (m.count(node)) {
            return m[node];
        }
        
        UndirectedGraphNode * newNode = new UndirectedGraphNode(node->label);
        m[node] = newNode;
        vector<UndirectedGraphNode *> v;
        for (int i = 0; i < node->neighbors.size(); i++) {
            v.push_back(getCopyGraph(node->neighbors[i], m));
        }
        newNode->neighbors = v;
        
        return newNode;
    }
};

Last updated