📌  相关文章
📜  检查一棵二叉树是否是另一棵二叉树的子树 |设置 2(1)

📅  最后修改于: 2023-12-03 15:26:44.554000             🧑  作者: Mango

检查一棵二叉树是否是另一棵二叉树的子树

简介

本文将介绍如何检查一棵二叉树是否是另一棵二叉树的子树。我们将使用递归算法来解决这个问题。

算法

我们将从根节点开始比较两棵树的每个节点。如果两个节点的值相同,则我们比较它们的左右子树是否相同。如果相同,则这棵树是另一棵树的子树,否则我们继续比较左右子树。

代码如下:

def is_subtree(s, t):
    if not s:
        return False
    if is_same_tree(s, t):
        return True
    return is_subtree(s.left, t) or is_subtree(s.right, t)

def is_same_tree(p, q):
    if not p and not q:
        return True
    if not p or not q:
        return False
    if p.val != q.val:
        return False
    return is_same_tree(p.left, q.left) and is_same_tree(p.right, q.right)
复杂度分析

时间复杂度:O(m * n),其中 m 和 n 分别为两棵树的节点数,因为我们需要遍历两棵树。

空间复杂度:O(max(m, n)),因为递归深度不超过 max(m, n)。

总结

本文介绍了如何检查一棵二叉树是否是另一棵二叉树的子树。我们使用了递归算法来解决这个问题。时间复杂度为 O(m * n),空间复杂度为 O(max(m, n))。