Leetcode 1643 Solution
This article provides solution to leetcode question 1643 (number-of-nodes-in-the-sub-tree-with-the-same-label)
Access this page by simply typing in "lcs 1643" in your browser address bar if you have bunnylol configured.
Leetcode Question Link
https://leetcode.com/problems/number-of-nodes-in-the-sub-tree-with-the-same-label
Solution
class Solution:
def countSubTrees(self, n: int, edges: List[List[int]], labels: str) -> List[int]:
tree = collections.defaultdict(list)
for src, dst in edges:
tree[src].append(dst)
tree[dst].append(src)
cache = {}
def dfs(node_id):
nonlocal tree
nonlocal labels
nonlocal cache
if node_id in cache:
return cache[node_id]
# Fill up the cache first.
cache[node_id] = None
# Prepare an agg dict.
agg_dict = collections.defaultdict(int)
# Walk through the child nodes, and update the agg dict.
for child_node_id in tree[node_id]:
child_agg_dict = dfs(child_node_id)
if child_agg_dict is None:
continue
for k, v in child_agg_dict.items():
agg_dict[k] += v
# Update the current node.
agg_dict[labels[node_id]] += 1
# Generate the result, and return it.
cache[node_id] = agg_dict
return agg_dict
return [dfs(i)[label] for i, label in enumerate(labels)]