572.另一个树的子树
难度:中等
标签:递归
题目描述
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
题解
一个树是另一个树的子树 则:
- 要么这两个树相等
- 要么这个树是另一个树的左子树的子树
- 要么这个树是另一个树的右子树的子树
代码实现
# Definition for a binary tree node.
# 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:
def isEqual(t0, t1):
if t0 is None and t1 is None:
return True
if t0 is None or t1 is None or t0.val != t1.val:
return False
return isEqual(t0.left, t1.left) and isEqual(t0.right, t1.right)
if t is None:
return True
if s is None and t is not None:
return False
return isEqual(s, t) or self.isSubtree(s.left, t) or self.isSubtree(s.right, t)