剑指offer 26. 数的子结构

题目:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)  中等

B是A的子结构, 即 A中有出现和B相同的结构和节点值。

方法:递归  时间复杂度O(n)  空间复杂度O(n) 

该题包含两个过程,一是遍历树A找与B相同的首个节点,二是从相同节点开始一起向下判断

def isSubStructure(self, A, B):
        """
        :type A: TreeNode
        :type B: TreeNode
        :rtype: bool
        """
        def recur(A,B):
            if B is None:
                return True
            if A is None or A.val != B.val:
                return False

            return recur(A.left,B.left) and recur(A.right,B.right)

        return bool(A and B) and (recur(A,B) or self.isSubStructure(A.left,B) or self.isSubStructure(A.right,B))

 

posted @ 2022-07-26 10:20  Liang-ml  阅读(25)  评论(0)    收藏  举报