1. 解题思路
这一题就是一个树的遍历,首先经过一次自底向上的遍历将所有的子树的父节点进行更新,然后重新二次自顶向下遍历一下记录各个子树的节点数目即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def findSubtreeSizes(self, parent: List[int], s: str) -> List[int]:
graph = defaultdict(list)
for u, v in enumerate(parent):
graph[v].append(u)
tree = deepcopy(parent)
def dfs(root, closest):
nonlocal tree
if closest[ord(s[root]) - ord('a')] != -1:
tree[root] = closest[ord(s[root]) - ord('a')]
p = closest[ord(s[root]) - ord('a')]
closest[ord(s[root]) - ord('a')] = root
for u in graph[root]:
dfs(u, closest)
closest[ord(s[root]) - ord('a')] = p
return
dfs(0, [-1 for _ in range(26)])
graph = defaultdict(list)
for u, v in enumerate(tree):
graph[v].append(u)
ans = [0 for _ in parent]
def dfs2(root):
nonlocal ans
cnt = 1
for u in graph[root]:
cnt += dfs2(u)
ans[root] = cnt
return cnt
dfs2(0)
return ans
提交代码评测得到:耗时1223ms,占用内存59.6MB。
Leetcode 3331题树遍历解题思路与代码
574

被折叠的 条评论
为什么被折叠?



