- Number of Nodes in the Sub-Tree With the Same Label
You are given a tree (i.e. a connected, undirected graph that has no cycles) consisting of n
nodes numbered from 0
to n - 1
and exactly n - 1
edges
. The root of the tree is the node 0
, and each node of the tree has a label which is a lower-case character given in the string labels
(i.e. The node with the number i
has the label labels[i]
).
The edges
array is given on the form edges[i] = [ai, bi]
, which means there is an edge between nodes ai
and bi
in the tree.
Return an array of size n
where ans[i]
is the number of nodes in the subtree of the ith
node which have the same label as node i
.
A subtree of a tree T
is the tree consisting of a node in T
and all of its descendant nodes.
var countSubTrees = function(n, edges, labels) {
const graph = {}
for (let i = 0; i < n; i++) {
graph[i] = []
}
for (const edge of edges) {
graph[edge[0]].push(edge[1])
graph[edge[1]].push(edge[0])
}
function addObj(obj1, obj2) {
for (const key in obj2) {
if (key in obj1) {
obj1[key] += obj2[key]
} else {
obj1[key] = obj2[key]
}
}
}
const result = []
function dfs(node, parent) {
const count = { [labels[node]]: 1 }
for (const child of graph[node]) {
if (child == parent) continue
addObj(count, dfs(child, node))
}
result[node] = count[labels[node]]
return count
}
dfs(0, 0)
return result
}