class Solution {
public:
bool isSubStructure(TreeNode* A, TreeNode* B) {
if(A==nullptr || B==nullptr) return false;
// 当前子树包含子结构 || 左子树包含子结构 || 右子树包含子结构
return dfs(A,B) || isSubStructure(A->left,B) || isSubStructure(A->right,B);
}
bool dfs(TreeNode* A,TreeNode* B){
// 子结构B遍历结束
if(B==nullptr) return true;
// 子结构未遍历结束A就结束了
if(A==nullptr) return false;
// 确保节点值和结构相同
return A->val==B->val && dfs(A->left,B->left) && dfs(A->right,B->right);
}
};