



可以使用递归的方法来检查 subRoot 是否是 root 的子树。具体步骤如下:
- 遍历
root的每个节点,判断以该节点为根的子树是否与subRoot相同。 - 如果相同,则返回
true,否则递归检查root的左子树和右子树。 - 使用一个辅助函数
isSameTree来判断两棵树是否相同。
代码实现如下:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def isSubtree(root: TreeNode, subRoot: TreeNode) -> bool:
if not root:
return False
if isSameTree(root, subRoot):
return True
return isSubtree(root.left, subRoot) or isSubtree(root.right, subRoot)
def isSameTree(p: TreeNode, q: TreeNode) -> bool:
if not p and not q:
return True
if not p or not q or p.val != q.val:
return False
return isSameTree(p.left, q.left) and isSameTree(p.right, q.right)
解释:
isSubtree负责遍历root的所有子树。isSameTree用于判断两棵树是否完全相同。- 递归地检查
root.left和root.right,如果subRoot是其中之一的子树,则返回True。
该算法的时间复杂度为 O(m * n),其中 m 是 root 的节点数,n 是 subRoot 的节点数。
337

被折叠的 条评论
为什么被折叠?



