652. Find Duplicate Subtrees
寻找重复subtree,粗暴的方法是遍历所有node,对于值相同的node,对比以该node为root的subtree是否相同。
换个思路的话,这题本质上还是遍历二叉树,应该还是二叉树搜索的递归模版可以解决的,此处改动就是,对left/right subtree的递归结果,要拿来验证是否已经出现过(即符合“重复“条件),有就加进结果。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findDuplicateSubtrees(self, root: TreeNode) -> List[TreeNode]:
map_ = dict()
res = []
# 数组(子树)序列化
def getId(root, map_, res):
if not root: return "#"
# 这里用前序/后续都可以,但中序不可以
key = getId(root.left, map_, res) + "," + getId(root.right, map_, res) + "," + str(root.val)
# 如果发现序列化了的subtree已经在map里了,就是有重复
# 添加==1的判断,避免重复加入res
if key in map_.keys() and map_[key] == 1: res.append(root)
map_[key] = map_.get(key, 0) + 1
return key
getId(root, map_, res)
return res
Last updated
Was this helpful?