📅  最后修改于: 2023-12-03 15:10:51.828000             🧑  作者: Mango
在二叉树的问题中,经常需要判断一个二叉树是否是另一个二叉树的子树。子树的定义是在原树中找到一颗子树,其与另一棵树的结构完全相同但节点的值可以不同。
判断一个二叉树是否是另一棵树的子树,可以采用递归的方式进行判断。具体实现思路如下:
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
。
本文介绍了如何判断一个二叉树是否是另一个二叉树的子树,采用了递归的方式进行判断。在实现过程中要注意以上面给出的代码为准,因为每个人可能有不同的写法。