美文网首页
[剑指Offer]树的子结构

[剑指Offer]树的子结构

作者: Sui_Xin | 来源:发表于2019-03-04 21:21 被阅读0次

    本文首发于我的个人博客Suixin’s Blog
    原文: https://suixinblog.cn/2019/03/target-offer-has-subtree.html  作者: Suixin

    题目描述

    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    解题思路

    创建一个新的IsSubtree函数用来递归调用。如果根节点相同,就递归调用该函数,否则判断B是否为A的左子树或右子树的子结构。
    需要注意空树的情况:HasSubtree中任一树为空就返回FalseIsSubtree中需先判断B是否为空,为空表示已经遍历完了,是子结构,A树为空或当前两个根节点不同则返回False,否则递归到左子树和右子树继续判断,两个子树都返回True则返回True

    代码

    Python(2.7.3)

    # -*- 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 pRoot1 is None or pRoot2 is None:
                return False
            return self.IsSubtree(pRoot1, pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)
        
        def IsSubtree(self, A, B):
            # 这里HasSubtree函数中调用的这个函数B不为None,所以判断条件仅适用于本身的递归调用
            if B is None:
                return True
            if A is None or A.val != B.val:
                return False
            return self.IsSubtree(A.left, B.left) and self.IsSubtree(A.right, B.right)
    

    运行时间:25ms
    占用内存:5860k

    参考

    https://www.nowcoder.com/profile/4462927/codeBookDetail?submissionId=9097366

    相关文章

      网友评论

          本文标题:[剑指Offer]树的子结构

          本文链接:https://www.haomeiwen.com/subject/ezpwuqtx.html