题目来源:链接
题目描述:
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
例如:
给定的树 A:
3
/ \
4 5
/ \
1 2
给定的树 B:
4
/
1
返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。
代码实现:
def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool:
def recur(A,B):
if not B:
return True
if not A 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))
解题思路:
首先,要判断一个树是否是另一个树的子树,或者一棵树是否为另一颗树的(左/右子树)的子树
特殊情况:B为空树,那肯定是A的子树;如果A为空或者A的节点值!=B的节点值,那肯定不是
在当前节点开始,两棵树已经经历过前面两种情况的筛选
只需要判断对应的左孩子节点和对应的有孩子节点是否相同