题目
【剑指offer】026.树的子结构
判断树B是否为A的子结构
解法
递归的思路,应该先想到拆分子问题。借助先序遍历的流程,如果A当前节点值和B当前节点值相等,那么则可以调用isContain()判断以这两个节点为根节点的两个子树是否存在子结构关系。。如果不存在,则看A的左子树和B关系,否则看右子树和B关系。
class Solution:
def isContain(self, A, B):
if B is None:
return True
if A is None:
return False
if A.val != B.val:
return False
return self.isContain(A.left, B.left) and self.isContain(A.right, B.right)
def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool:
if B is None or A is None:
return False
if A.val==B.val and self.isContain(A, B):
return True
return self.isSubStructure(A.left, B) or self.isSubStructure(A.right, B)