题目:
输入两棵二叉树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