如何访问具有空向量列表的节点的相邻节点



当我们首先执行mp[node] =时,在下面的代码中意味着现在我们的节点指向一个空向量的节点,那么我们如何访问它的相邻节点在for(auto adj: current ->邻居){}。当我们执行mp[node] = first时,是否节点引用没有改变;问题→链接https://leetcode.com/problems/clone-graph/

/*
// 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:
unordered_map<Node* , Node*> mp; 

Node* cloneGraph(Node* node) {
if(node == NULL) 
{
return NULL;
}

Node* first = new Node(node -> val, {}); 
mp[node] = first;

queue<Node*> q; 
q.push(node); 

while(q.empty() == false) 
{
Node* curr = q.front(); 
q.pop(); 

for(auto adj: curr -> neighbors) 
{
if(mp.find(adj) == mp.end()) 
{
mp[adj] = new Node(adj -> val, {}); 
q.push(adj); 

}

mp[curr] -> neighbors.push_back(mp[adj]); 
}
}

return mp[node];
}
};

在c++中,类属性是由类构造函数自动构造的。因此,您不需要在构造函数中设置neighbors属性。

// Definition for a Node.
class Node {
public:
int val;
vector<Node*> neighbors;
/** Construct with no neighbors
* @param[in] _val node value, defaults to 0
*/
Node(int _val = 0)
: val( _val )
{}
/** Construct with  neighbors
* @param[in] _val node value
* @param[in] _neighbors
*/
Node(int _val, vector<Node*>& _neighbors)
:  val( _val )
, neighbors( _neighbors )
{}
};  

在你的代码中有

unordered_map<Node* , Node*> mp; 

这看起来很奇怪!你能解释一下你要做什么吗?这似乎是一个键和值都相等的映射,这是不必要的。也许一套就能满足你的需要。

最新更新