判断 t1 树中是否含有与 t2 树拓扑结构完全相同的子树

判断 t1 树中是否含有与 t2 树拓扑结构完全相同的子树

题目

给定两棵树t1, t2的根节点root1, root2,判断t1中是否有与t2拓扑结构完全相同的子树。

思路

其实就是判断t2是不是t1的子树,可以得到两棵树的先序序列s1和s2,判断s2是不是s1的子串。

TreeNode

"""
Data Structures And Algorithms:
    check if tree2 is subtree of tree1

leetcode 572:
    https://leetcode-cn.com/submissions/detail/40892514/
"""


class TreeNode():  # pylint: disable=too-few-public-methods
    """
    Binary Tree Node
    """
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

实现

def serialize(root):
    """
    serialize tree to string

    :param root: the root of tree
    """
    def preorder(node):
        """
        serialize by pre order traversal

        :param node: the current node to traversal
        """
        if not node:
            return '#|'

        res = '(' + str(node.val) + ')'
        res += preorder(node.left)
        res += preorder(node.right)
        return res

    return preorder(root)


def is_subtree(root1, root2):
    """
    check if tree t2 is subtree of t1

    :param root1: the root of tree1
    :param root2: the root of tree2
    """
    serialize_str1 = serialize(root1)
    serialize_str2 = serialize(root2)
    return serialize_str2 in serialize_str1

测试

Leetcode 572

另一种实现

def is_subtree2(root1, root2):
    """
    check if tree t2 is subtree of t1

    :param root1: the root of tree1
    :param root2: the root of tree2
    """
    def to_tupple(node):
        if node is None:
            return None

        return (node.val, to_tupple(node.left), to_tupple(node.right))

    return str(to_tupple(root2)) in str(to_tupple(root1))

测试

Leetcode 572

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值