题目: 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。 思路: 两个函数的区别: isSame(A,B):用来判断B的结构是否 与 A的含根节点的子结构 相同。B为空时,B是A的子结构。 isSubStructure(A,B):用来判断B是否为A的子结构。B为空时,B不是A的子结构。 示例:A=[4,2,3,4,5,6,7,8,9] ,B=[4,8,9]
解答:
# 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: if not B: return False if not A: return False if A.val==B.val: return self.isSame(A.left,B.left) and self.isSame(A.right,B.right) or self.isSubStructure(A.left,B) or self.isSubStructure(A.right,B) else: return self.isSubStructure(A.left,B) or self.isSubStructure(A.right,B) def isSame(self,A:TreeNode,B:TreeNode)->bool: if not B: return True if not A: return False if A.val==B.val: return self.isSame(A.left,B.left) and self.isSame(A.right,B.right) else: return False