1519. 子树中标签相同的节点数

Medium

思路

要统计子树中的标签相同的节点数,我们就要遍历树。可以想到DFS和BFS两种方式。这道题是统计某个节点的子节点的相同标签的数量,显然使用DFS比较合适。

以上,尝试写一下代码,AC!

代码

python3

class Solution:
    def sumCounter(self,c1,c2):
      c = collections.defaultdict(int)
      for k in c1.keys() | c2.keys():
        c[k] = c1[k] + c2[k]
      return c

    def helper(self,labels,nodes,visited,res,cur_node):
      counter = collections.defaultdict(int)
      visited.add(cur_node)
      counter[labels[cur_node]] += 1
      for c in nodes[cur_node]:
        if c not in visited:
          childCounter = self.helper(labels, nodes,visited,res,c)
          counter = self.sumCounter(counter,childCounter)
      res[cur_node] = counter[labels[cur_node]]
      return counter

    def countSubTrees(self, n: int, edges: List[List[int]], labels: str) -> List[int]:
      nodes = {}
      for e in edges:
        nodes.setdefault(e[0], []).append(e[1])
        nodes.setdefault(e[1], []).append(e[0])
      res = [1] * n
      visited = set()
      self.helper(labels,nodes,visited,res,0)
      return res