

class Solution {/*** 判断树 B 是否是树 A 的子结构* @param A 树 A 的根节点* @param B 树 B 的根节点* @return 如果 B 是 A 的子结构,返回 true;否则返回 false*/public boolean isSubStructure(TreeNode A, TreeNode B) {// 如果树 B 为空,直接返回 false,因为空树不是任何树的子结构if (B == null) {return false;}// 如果树 A 为空,但树 B 不为空,返回 falseif (A == null) {return false;}// 判断树 B 是否是树 A 的子结构// 1. 当前节点 A 和 B 匹配,递归判断子树// 2. 或者在 A 的左子树中查找 B// 3. 或者在 A 的右子树中查找 Breturn match(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);}/*** 判断以 A 为根的树是否包含以 B 为根的树* @param A 树 A 的根节点* @param B 树 B 的根节点* @return 如果树 B 是树 A 的子结构,返回 true;否则返回 false*/private boolean match(TreeNode A, TreeNode B) {// 如果 B 为空,说明匹配完成,返回 trueif (B == null) {return true;}// 如果 A 为空,但 B 不为空,说明匹配失败,返回 falseif (A == null) {return false;}// 如果当前节点 A 和 B 的值不相等,返回 falseif (A.val != B.val) {return false;}// 递归判断 A 的左子树和 B 的左子树,以及 A 的右子树和 B 的右子树return match(A.left, B.left) && match(A.right, B.right);}}
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):"""判断树 B 是否是树 A 的子结构@param A 树 A 的根节点@param B 树 B 的根节点@return 如果 B 是 A 的子结构,返回 true;否则返回 false"""def isSubStructure(self, A, B):#如果树 B 为空,直接返回 false,因为空树不是任何树的子结构if B is None:return False#如果树 A 为空,但树 B 不为空,返回 falseif A is None:return False#判断树 B 是否是树 A 的子结构#1. 当前节点 A 和 B 匹配,递归判断子树#2. 或者在 A 的左子树中查找 B#3. 或者在 A 的右子树中查找 Breturn self.match(A, B) or self.isSubStructure(A.left, B) or self.isSubStructure(A.right, B)"""判断以 A 为根的树是否包含以 B 为根的树@param A 树 A 的根节点@param B 树 B 的根节点@return 如果树 B 是树 A 的子结构,返回 true;否则返回 false"""def match(self,A,B):#如果 B 为空,说明匹配完成,返回 trueif B is None:return True#如果 A 为空,但 B 不为空,说明匹配失败,返回 falseif A is None:return False#如果当前节点 A 和 B 的值不相等,返回 falseif A.val != B.val:return False#递归判断 A 的左子树和 B 的左子树,以及 A 的右子树和 B 的右子树return self.match(A.left, B.left) and self.match(A.right, B.right)