Find duplicate subtree

One quick approach to handle subtree issue:

class Solution(object):
    def findDuplicateSubtrees(self, root):
        """
        :type root: TreeNode
        :rtype: List[TreeNode]
        """


        def put_map(node,m,res):
            if not node:
                return 'None'
            l = put_map(node.left, m, res)
            r = put_map(node.right, m, res)
            k = (node.val, l, r)   <------ this is the key, it only saves node value and left/right node
            if k not in m:
                m[k] = node
            else:
                res.add(m[k])
            return m[k]

        res = set()
        m = dict()
        put_map(root, m, res)
        return list(res)

Subtree of another tree

use the same approach!

class Solution(object):
    def isSubtree(self, s, t):
        """
        :type s: TreeNode
        :type t: TreeNode
        :rtype: bool
        """

        cache = {}
        def dfs(root):
            if not root: 
                return None

            left = dfs(root.left)
            right = dfs(root.right)

            if left == t or right == t: 
                return t

            if (root.val, left, right) in cache: 
                return cache[(root.val, left, right)]
            else:
                cache[(root.val, left, right)] = root
                return root

        dfs(t)
        return dfs(s) == t

results matching ""

    No results matching ""