Skip to content

Latest commit

 

History

History
47 lines (41 loc) · 1.51 KB

2023-01-12.md

File metadata and controls

47 lines (41 loc) · 1.51 KB

题目

  1. 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
}