【python】判断一棵树是否是另外一个树的子树

题目:

对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。

给定两棵二叉树的头结点AB,请返回一个bool值,代表A中是否存在一棵同构于B的子树。


两种方法:

1.将两个子树A,B按照同样的遍历方式(前序,后序,中序)序列化成字符串strA,strB。判断strB是否被strA包含。

2.迭代。


方法一代码:

# -*- coding:utf-8 -*-

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class IdenticalTree:
    def chkIdentical(self, A, B):
        # write code here
        if A==None or B==None:
            return False
        strA=self.pre(A)
        strB=self.pre(B)
        if strB in strA:
            return True
        else:
            return False
    def pre(self,root):
        res=''
        if root==None:
            return '#!'
        
        res+=str(root.val)+'!'
        res+=self.pre(root.left)
        res+=self.pre(root.right)
        return res


方法二代码:#参考链接 http://blog.csdn.net/u012560212/article/details/72731313

# Definition for a binary tree node.  
# class TreeNode(object):  
#     def __init__(self, x):  
#         self.val = x  
#         self.left = None  
#         self.right = None  
  
class Solution(object):  
    def isSubtree(self, A, B):  #用于判断的主函数,递归得遍历A的每一个结点,并将其作为新的根节点,再与B进行比较  
        """ 
        :type s: TreeNode 
        :type t: TreeNode 
        :rtype: bool 
        """  
        if not A:  
            return False  
              
        return self.isEqual(A,B) or self.isSubtree(A.left,B) or self.isSubtree(A.right,B)  
        #使用or相连,即其中只要有一个s的子树与t相同,则返回True  
          
          
    def isEqual(self,S,T):  #以S为根节点,判断S和T是否相等  
        if not S and not T:  
            return True  
        if S and T:  
            if S.val!=T.val:  
                return False  
            return self.isEqual(S.left,T.left) and self.isEqual(S.right,T.right)  
        else:  
            return False  




你可能感兴趣的:(【python】判断一棵树是否是另外一个树的子树)