输入两棵二叉树A和B,判断B是不是A的子结构。
分成两步:在树A中找到和树B的根节点的值一样的节点R、判断树A中以R为根节点的子树是不是包含和树B一样的结构。
class Solution:
def has_subtree(self, root1, root2):
flag = False
if root1 and root2:
if root1.val == root2.val:
flag = self.is_common_structure(root1, root2)
if not flag:
flag = self.has_subtree(root1.left, root2)
if not flag:
flag = self.has_subtree(root1.right, root2)
return flag
def is_common_structure(self, root1, root2):
if not root2:
return True
if not root1:
return False
if root1.val != root2.val:
return False
return self.is_common_structure(root1.left, root2.left) and \
self.is_common_structure(root1.right, root2.right)
采用防御性编程的方式,每次访问指针地址之前都要考虑这个指针有没有可能是None。
(最近更新:2019年07月16日)