题解 | #树的子结构#

树的子结构

http://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88

1.首先需要判断A,B的根节点是否一样。
2.如果不一样,判断A的左孩子和B的根节点是否一样,同理可判断A的右孩子和B的根节点是否一样。依次找下去
如果上述情况都不满足则说明不包含
1.如果找到了A中有值和B中的根节点相同,则比较左右子树是否相同。
2.如果B为空了,则说明包含
3.如果A为空了,则说明不包含

两个递归+深度优先遍历 python3
class Solution:

def HasSubtree(self, pRoot1, pRoot2):
    # write code here
    result = False
    if pRoot1 and pRoot2:
        if pRoot1.val == pRoot2.val:
            result = self.same(pRoot1,pRoot2)
        if not result:
            result = self.HasSubtree(pRoot1.left,pRoot2)
        if not result:
            result = self.HasSubtree(pRoot1.right,pRoot2)
    return result

def same(self,p1,p2):
    if not p2:
        return True
    if not p1:
        return False
    return p1.val == p2.val and self.same(p1.left,p2.left)and self.same(p1.right,p2.right)
全部评论

相关推荐

点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务