

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)