LeetCode.572.另一棵树的子树

题目描述:

给你两棵二叉树 rootsubRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树

输入输出实例:

思路:这道题目不绕,我们只需要使用深度优先搜索,遍历root树,然后找subroot是否与root本身、或与其左子树或者是右子树上的一部分相同,我们使用递归方法。构建一个函数isSubtree2,将root和subroot两个树作为参数,如果root为空我们返回False,如果root与subroot树相同我们就返回True,这两种情况讨论完我们就递归root的左子树或者是右子树看它是否与subroot树相同。所以我们还需要一个用来判断两个树是否相同的函数isSameTree,参数也是两个数,如果两个树都为空我们返回True,然后看是否有一个为空树,如果是我们返回False,讨论完这两种情况,我们需要return (s.val == t.val) and isSameTree(s.left,t.left) and isSameTree(s.right,t.right),即如果当前s节点值与t节点值相同,s左孩子与t左孩子值相同并且s右孩子与t右孩子相同,我们就返回True。根据上述思路,有以下代码:

python 复制代码
# 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
def isSameTree(s,t):
    #都是空树,直接返回True
    if not s and not t:
        return True
    #如果其中一个是空,返回False
    if not s or not t:
        return False
    #该节点和左子树右子树都相同返回True
    return (s.val == t.val) and isSameTree(s.left,t.left) and isSameTree(s.right,t.right)

def isSubtree2(r,su):
    if not r:
            return False
    if isSameTree(r,su):
            return True
    return isSubtree2(r.left,su) or isSubtree2(r.right,su)

class Solution:
    def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool:
        #思路:遍历root树,找root本身或者子树中是否有与subRoot相同的
        return isSubtree2(root,subRoot)
相关推荐
hid64663722几秒前
基于Matlab的含分布式电源配电网模型图:故障点设置与潮流计算下的短路电压电流波形展示
算法
BoBoZz19几秒前
ContourTriangulator从一个PNG图像中提取2D等值线(isoline)
python·vtk·图形渲染·图形处理
曲幽3 分钟前
Flask数据库操作进阶:告别裸写SQL,用ORM提升开发效率
python·sql·sqlite·flask·web·sqlalchemy
程序员miki3 分钟前
多模态模型演变
人工智能·python·llm·多模态·vlm
小年糕是糕手4 分钟前
【C++】内存管理(上)
java·开发语言·jvm·c++·算法·spring·servlet
编程大师哥4 分钟前
R 语言与 Python 数据分析核心区别:选型指南与场景适配
python·数据分析·r语言
shenzhenNBA5 分钟前
如何用python生成一定规则的序列号?
开发语言·python·sn·序列号
晚风(●•σ )8 分钟前
【数据结构】——算法设计范式的相关习题
数据结构·算法·贪心算法·深度优先·动态规划·剪枝·广度优先
秋刀鱼 ..9 分钟前
第二届机器学习、计算智能与模式识别国际学术会议(MLCIPR 2025)
运维·人工智能·python·科技·机器学习·自动化
啊吧怪不啊吧9 分钟前
算法王冠上的明珠——动态规划之斐波那契数列问题(第二篇)
大数据·算法·leetcode·动态规划