此题解主要采用递归方法来确定T2是否为T1的子树。首先定义一个辅助函数isSameTree,用于判断两棵树是否完全相同。然后在主函数checkSubTree中,对T1进行递归遍历,在每个节点处调用isSameTree来检查该节点生成的子树是否与T2相同。如果在任何节点发现T2为子树,则立即返回true。如果遍历完整个树也没有发现,则返回false。
时间复杂度: O(n*m)
空间复杂度: O(log n) in best case, O(n) in worst case
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSameTree(self, s, t):
# 如果两棵树都为空,则它们相同
if not s and not t:
return True
# 如果其中一棵树为空,则它们不相同
if not s or not t:
return False
# 检查当前节点的值以及左右子树是否相同
return s.val == t.val and self.isSameTree(s.left, t.left) and self.isSameTree(s.right, t.right)
def checkSubTree(self, t1: TreeNode, t2: TreeNode) -> bool:
# 如果T1为空,直接返回False
if not t1:
return False
# 检查当前节点形成的树是否与T2相同
if self.isSameTree(t1, t2):
return True
# 递归检查左右子树
return self.checkSubTree(t1.left, t2) or self.checkSubTree(t1.right, t2)