约定空树不是任意一个树的子结构
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
写一个辅助函数 bool isSame(TreeNode* a,TreeNode* b),判断从a节点开始,是否包含树b。
从上往下遍历树A的所有节点,每个节点都和树B进行一次对比
bool isSame(TreeNode* a,TreeNode* b){
if(!b)return true;
if(!a)return false;
if(a->val!=b->val)return false;
return isSame(a->left,b->left)&&isSame(a->right,b->right);
}
bool isSubStructure(TreeNode* A, TreeNode* B) {
if(!A||!B)return false;
bool res=isSame(A,B);
if(res==false){
res=isSubStructure(A->left,B);
}
if(res==false){
res=isSubStructure(A->right,B);
}
return res;
}