📜  检查二叉树是否是另一棵二叉树的子树 |设置 3(1)

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

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

在二叉树的问题中,经常需要判断一个二叉树是否是另一个二叉树的子树。子树的定义是在原树中找到一颗子树,其与另一棵树的结构完全相同但节点的值可以不同。

问题分析

判断一个二叉树是否是另一棵树的子树,可以采用递归的方式进行判断。具体实现思路如下:

  1. 如果两个树的根节点的值相同,则递归判断两个根节点的左右子树是否都相同;
  2. 如果两个树的根节点的值不相同,则递归判断主树的左子树是否是子树的相同,或者判断主树的右子树是否是子树的相同。
代码实现
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
        if not s and not t:
            return True
        if not s or not t:
            return False
        if s.val == t.val and self.isSame(s.left, t.left) and self.isSame(s.right, t.right):
            return True
        else:
            return self.isSubtree(s.left, t) or self.isSubtree(s.right, t)

    def isSame(self, s: TreeNode, t: TreeNode) -> bool:
        if not s and not t:
            return True
        if not s or not t:
            return False
        if s.val == t.val and self.isSame(s.left, t.left) and self.isSame(s.right, t.right):
            return True
        else:
            return False

在上面的代码实现中,TreeNode类表示了二叉树的节点,Solution类实现了判断一个二叉树是否是另一个二叉树的子树的逻辑。

isSubtree方法中,如果两个树的根节点的值相同,就递归判断两个根节点的左右子树是否都相同,否则就递归判断主树的左子树是否是子树的相同,或者判断主树的右子树是否是子树的相同。

isSame方法中,如果左右子树的值和结构都相同,就返回True,否则返回False

总结

本文介绍了如何判断一个二叉树是否是另一个二叉树的子树,采用了递归的方式进行判断。在实现过程中要注意以上面给出的代码为准,因为每个人可能有不同的写法。