题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
牛客网:链接
要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步在树A中找到和B的根结点的值一样的结点R,第二步再判断树A中以R为根节点的子树是不是包含和树B一样的结构。
这里使用递归的方法即可。
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def HasSubtree(self, pRoot1, pRoot2):
# write code here
if not pRoot1 or not pRoot2:
return False
'''左子树或者右子树只要有满足的子树即可
而且即使根节点在几层相同 但是子树不一样 也有可能在后几层有匹配的跟结点和子树 所以是or的关系'''
return self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2) or self.is_subtree(pRoot1, pRoot2)
def is_subtree(self, A, B):
'''判断的前后顺序不能颠倒 必须先判断B 再判断A'''
if not B:
return True
if not A or A.val != B.val:
return False
'''必须左子树和右子树都相等 所以是and'''
return self.is_subtree(A.left, B.left) and self.is_subtree(A.right, B.right)