代码拉取完成,页面将自动刷新
// Time: O(n)
// Space: O(n)
class Solution {
public:
vector<int> sumOfDistancesInTree(int N, vector<vector<int>>& edges) {
unordered_map<int, vector<int>> graph;
for (const auto& edge : edges) {
graph[edge[0]].emplace_back(edge[1]);
graph[edge[1]].emplace_back(edge[0]);
}
vector<int> count(N, 1);
vector<int> result(N, 0);
dfs(graph, 0, -1, &count, &result);
dfs2(graph, 0, -1, &count, &result);
return result;
}
private:
void dfs(const unordered_map<int, vector<int>>& graph,
int node, int parent,
vector<int> *count, vector<int> *result) {
if (!graph.count(node)) {
return;
}
for (const auto& nei : graph.at(node)) {
if (nei != parent) {
dfs(graph, nei, node, count, result);
(*count)[node] += (*count)[nei];
(*result)[node] += (*result)[nei] + (*count)[nei];
}
}
}
void dfs2(const unordered_map<int, vector<int>>& graph,
int node, int parent,
vector<int> *count, vector<int> *result) {
if (!graph.count(node)) {
return;
}
for (const auto& nei : graph.at(node)) {
if (nei != parent) {
(*result)[nei] = (*result)[node] - (*count)[nei] +
count->size() - (*count)[nei];
dfs2(graph, nei, node, count, result);
}
}
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。