//小白代码,用递归做
class Solution {
public:
bool issame(TreeNode* pRoot1, TreeNode* pRoot2){
if(pRoot2==NULL) return true;
else{
if(pRoot1==NULL) return false;
if(pRoot1->val!=pRoot2->val) return false;
else return issame(pRoot1->left, pRoot2->left) &&
issame(pRoot1->right, pRoot2->right);
}
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if (pRoot2 == NULL||pRoot1==NULL) return false;
bool res=false;//结果
if (pRoot1->val == pRoot2->val) {
if(issame(pRoot1->left, pRoot2->left) &&issame(pRoot1->right, pRoot2->right))
res=true;
}//判断该位置是否是有相同的子结构
if((res==false)&&(HasSubtree(pRoot1->left, pRoot2)||HasSubtree(pRoot1->right, pRoot2)))
res=true;
//换到左右子树分别看是否有相同的子结构
return res;
}
};