两种写法
1、一个Dfs
check的作用是: 比如B节点是1 2 不用check的话 可能只要A包含了1和2节点,哪怕不是连着的,也会返回true
class Solution {
public:
bool isSubStructure(TreeNode* A, TreeNode* B) {
if( A && !B) return false;
return sub(A, B, 0);
}
bool sub(TreeNode* A, TreeNode* B, int check) {
if(!B) return true;
if(!A) return false;
if (A->val == B->val) {
if(check) return (sub(A->left, B->left, 1) && sub(A->right, B->right, 1));
else
return (sub(A->left, B->left,1) && sub(A->right, B->right,1)) || (
sub(A->left, B,0) || sub(A->right, B,0)
) ;
} else {
if(check) return false;
return sub(A->left, B, 0) || sub(A->right, B, 0);
}
}
};
2、两个dfs
class Solution {
public:
bool isSubStructure(TreeNode* A, TreeNode* B) {
if( A && !B) return false;
return sub(A, B, 0);
}
bool sub(TreeNode* A, TreeNode* B, int check) {
if(!B) return true;
if(!A) return false;
if (A->val == B->val) {
if(check) return (sub(A->left, B->left, 1) && sub(A->right, B->right, 1));
else
return (sub(A->left, B->left,1) && sub(A->right, B->right,1)) || (
sub(A->left, B,0) || sub(A->right, B,0)
) ;
} else {
if(check) return false;
return sub(A->left, B, 0) || sub(A->right, B, 0);
}