剑指offer26.树的子结构

测试:两棵树头节点有一个或两个都是空指针,树 A 或树 B 所有节点都只有左子节点或右子节点,

思路:在树 A 中找到和树 B 的根节点的值一样的节点 R(树的遍历——递归或循环),然后判断 A 中以 R 为根节点的子树是不是包含和树 B 一样的结构。会多次判断一个指针是不是空指针,避免试图访问空指针而造成程序崩溃

class Solution(object):
    def hasSubtree(self, pRoot1, pRoot2):
        """
        :type pRoot1: TreeNode
        :type pRoot2: TreeNode
        :rtype: bool
        """
        if pRoot1 is None or pRoot2 is None:
            return False
        return isSubtree(pRoot1,pRoot2)
        
    def isSubtree(self,p1,p2):
        if p2 == None:
            return True
        if p1 == None:
            return p1==p2
        res = False
        if p1.val == p2.val:
            res = self.isSubtree(p1.left,p2.left) and self.isSubtree(p1.right,p2.right)
        return res or self.isSubtree(p1.left,p2) or self.isSubtree(p1.right,p2)

你可能感兴趣的:(剑指offer26.树的子结构)