leetcode-133. Clone Graph

来源:互联网 发布:js 获取object类型 编辑:程序博客网 时间:2024/06/06 15:01

考察点:图,DFS;
思路:就是用一个map记录对应label的node指针,克隆了的话就直接返回指向该node的指针,没有的话就new一个然后再对它进行递归添加节点。这个函数返回的是一个节点,而且该节点的所有neighbors都找全了,所以mp中有的话就直接返回就行。要从宏观角度看这个函数。

C++代码:

/** * Definition for undirected graph. * struct UndirectedGraphNode { *     int label; *     vector<UndirectedGraphNode *> neighbors; *     UndirectedGraphNode(int x) : label(x) {}; * }; */class Solution {public:    unordered_map<int, UndirectedGraphNode*> mp;    UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {        UndirectedGraphNode * root = NULL;        if (node) {            if (mp.find(node->label) == mp.end()) {                root= new UndirectedGraphNode(node->label);                   mp[node->label] = root;            } else {                root = mp[node->label];                return root;            }            for (int i=0; i<node->neighbors.size(); i++) {                UndirectedGraphNode *temp = cloneGraph(node->neighbors[i]);                root->neighbors.push_back(temp);            }        }        return root;    }};
0 0
原创粉丝点击