欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > LeetCode.572.另一棵树的子树

LeetCode.572.另一棵树的子树

2024/10/25 11:24:18 来源:https://blog.csdn.net/ALLe_Y/article/details/140913746  浏览:    关键词:LeetCode.572.另一棵树的子树

题目描述:
 

给你两棵二叉树 root 和 subRoot 。检验 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。根据上述思路,有以下代码:

# Definition for a binary tree node.
class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = right
def isSameTree(s,t):#都是空树,直接返回Trueif not s and not t:return True#如果其中一个是空,返回Falseif not s or not t:return False#该节点和左子树右子树都相同返回Truereturn (s.val == t.val) and isSameTree(s.left,t.left) and isSameTree(s.right,t.right)def isSubtree2(r,su):if not r:return Falseif isSameTree(r,su):return Truereturn 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)

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com