zoukankan      html  css  js  c++  java
  • 《剑指offer》面试题14:树的子结构(Python)

    题目描述

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

    题目解析

    这个题目很明显可以使用递归来做,我们只需要判断其子数的结构是不是相同的就行了,这里也编写了两个函数。代码如下:

    # -*- 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
         #空树不是任何一个树的子结构,不符合定义,直接返回Fasle
    if pRoot1 == None or pRoot2 == None: return False return self.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:#假设我们输入进来的两棵树是相同的,则来判断是否是相同的,如果是相同的则输出True,相同的树互为子结构 res = self.isSubtree(p1.left, p2.left) and self.isSubtree(p1.right, p2.right)
        #如果输入进来的两颗树是不相同的,那么大树的左子树和右子树其中有一个为p2树所在的树则返回为真
    return res or self.isSubtree(p1.left, p2) or self.isSubtree(p1.right, p2)

     解法二:

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool:
            #空树不是任意树的子结构,因此返回False
            if A == None or B == None:
                return False
            #两棵树是完全相同的,则互为子结构
            return self.dfs(A,B) or self.isSubStructure(A.left,B) or self.isSubStructure(A.right,B)
        
        #利用dfs()函数来判断两棵树是否是相同
        def dfs(self, A: TreeNode, B: TreeNode) -> bool:
            #为啥B树都啥也没了,还能够和A一样?返回True?
            if B == None:
                return True
            if A == None:
                return False
            return A.val == B.val and self.dfs(A.left,B.left) and self.dfs(A.right,B.right)
  • 相关阅读:
    [BZOJ4444][SCOI2015]国旗计划(倍增)
    [BZOJ4423][AMPPZ2013]Bytehattan(对偶图+并查集)
    [BZOJ4416][SHOI2013]阶乘字符串(子集DP)
    [BZOJ3203][SDOI2013]保护出题人(凸包+三分)
    [BZOJ4026]dC Loves Number Theory(线段树)
    51nod部分容斥题解
    [CodeVS4438]YJQ Runs Upstairs
    [HDU4906]Our happy ending
    牛客网NOIP赛前集训营-提高组(第四场)游记
    [BJWC2011]元素
  • 原文地址:https://www.cnblogs.com/geeksongs/p/13567325.html
Copyright © 2011-2022 走看看