利用邻接表存储,这样dfs自变量里面edge变量,深度遍历统计每个字母的数量,dfs返回值代表所有字母当前统计的变量个数
#include <iostream>
#include <vector>
class Solution {
public:
vector<vector<int>> vt;
vector<int> visit;
vector<int> res;
int len;
vector<int> countSubTrees(int n, vector<vector<int>>& edges, string labels) {
vt.resize(n);
visit.resize(n);
res.resize(n);
for(const auto& e: edges){
vt[e[0]].push_back(e[1]);
vt[e[1]].push_back(e[0]);
}
for(int i=0;i<n;i++){
visit[i]=0;
}
int len = edges.size();
dfs(0,labels);
return res;
}
vector<int>dfs(int point,string &labels){
vector<int> cur_char(26, 0);
cur_char[labels[point] - 'a'] = 1;
visit[point]=1;
if(vt[point].size() == 0){
res[point] = 1;
return cur_char;
}
cout<<res[0]<<endl;
for(int y: vt[point]){
if(visit[y] == 1) continue;
auto v = dfs(y,labels);
for(int j = 0; j < 26; ++j){
cur_char[j] += v[j];
}
}
res[point] = cur_char[labels[point] - 'a'];
return cur_char;
}
};