题目出处:https://leetcode-cn.com/problems/restore-the-array-from-adjacent-pairs/
思路:根据本题的特点,如果是首尾两个元素,则只有一个邻居。如果是中间的元素,则有两个邻居。构造哈希表<节点,节点的邻居集合>,遍历该集合便可解决问题。
class Solution {
private:
vector<int> ans;
public:
// void dfs(int v, unordered_map<int, vector<int>> & mp, unordered_map<int, bool>& vis){
// for(int neibor : mp[v]){
// if(!vis[neibor]){
// vis[neibor] = true;
// ans.push_back(neibor);
// dfs(neibor, mp, vis);
// }
// }
// }
vector<int> restoreArray(vector<vector<int>>& adjacentPairs) {
unordered_map<int, vector<int>> mp;
for(vector<int> & adjacentPair : adjacentPairs){
mp[adjacentPair[0]].push_back(adjacentPair[1]);
mp[adjacentPair[1]].push_back(adjacentPair[0]);
}
int n = mp.size();
ans.resize(n); //用dfs的话去掉这句话
unordered_map<int, bool> vis;
for(auto & v : mp){
if(v.second.size() == 1){
//ans.push_back(v.first);
ans[0] = v.first;
vis[v.first] = true;
break;
}
}
//dfs(ans[0], mp, vis);
ans[1] = mp[ans[0]][0];
for(int i = 2; i < n; ++i){
vector<int> neibor = mp[ans[i-1]];
ans[i] = neibor[0] == ans[i-2] ? neibor[1] : neibor[0];
}
return ans;
}
};