def travel(root):
if root空: return
left = travel(root.left)
right travel(root.right)
得到序列,判断
class Solution:
def findDuplicateSubtrees(self, root: Optional[TreeNode]) -> List[Optional[TreeNode]]:
self.hash = {} #存储重复序列
self.res = [] #结果
def traval(root):
if not root:
return 'null'
left = traval(root.left)
right = traval(root.right)
# 以下几种顺序均可
s = str(root.val) + ',' + str(left) + ',' + str(right) #前序
# s = str(root.val) + ',' + str(right) + ',' + str(left) #还是前序
# s = str(right)+ ',' + str(left) + ',' + str(root.val) #后序
# s = str(left)+ ',' + str(right) + ',' + str(root.val) #也是后序
# 统计出现次数
self.hash[s] = self.hash.get(s, 0) + 1
if self.hash[s] == 2:
self.res.append(root) #遇到重复的序列,把根(而不是序列)加入结果
return s #记得返回序列
traval(root)
return self.res