652. 寻找重复的子树
题目描述
解题思路
- 子树间的比较涉及到对每个结点构成的子树进行序列化
- 对序列化后的字符串计数,获取重复结点
- 因为要对比每个节点的子树,因此必须采用后序遍历
代码实现
def findDuplicateSubtrees(self, root: TreeNode) -> List[TreeNode]:
"""
要点:
1. 对每个结点构成的子树进行序列化
2. 对序列化后的字符串计数,获取重复结点
"""
counter = {}
res = []
def find(root: TreeNode) -> str:
# 因为要对比每个节点的子树,因此必须采用后序遍历
if not root:
return "#"
left = find(root.left)
right = find(root.right)
s = ",".join([left, right, str(root.val)])
counter[s] = counter.get(s, 0) + 1
if counter[s] == 2:
res.append(root)
return s
find(root)
return res