题目:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
示例:
输入:{8,8,#,9,#,2,#,5},{8,9,#,2}
返回值:true
思路:
本题比较困难,仍旧使用递归思路来解答。
首先判断A和B的根节点是否一样,如果一样则继续判断A的左子树和B的右子树是否相等,以及A的右子树和B的右子树是否相等
如果不一样,则判断A的左子树或右子树中是否包含B的根节点
代码:
class Solution:
def HasSubtree(self, pRoot1, pRoot2):
# write code here
if pRoot1 == None or pRoot2 == None:
return False #根据题干要求返回False
result = False
if pRoot1.val == pRoot2.val:
result = self.isSubtree(pRoot1, pRoot2)
#如果结点相等,isSubtree函数负责判断#这两个结点的孩子是否相等
if result == False:#当与小树相同的子树不在根部,找大树左子树 #左边找到了就不需要再找了
result = self.HasSubtree(pRoot1.left, pRoot2) | self.HasSubtree(pRoot1.right, pRoot2)
return result
def isSubtree(self, root1, root2):
if root2 == None:
return True
if root1 == None:
return False
if root1.val == root2.val:
return self.isSubtree(root1.left, root2.left) & self.isSubtree(root1.right, root2.right)
return False