C++/代码:

class Solution {
public:
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
        if (!pRoot1 || !pRoot2) return false;//先判断空树返回false
        if (IsPart(pRoot1,pRoot2)) return true;//先找根节点
        return HasSubtree(pRoot1->left,pRoot2) || HasSubtree(pRoot1->right,pRoot2); //换个根节点
    }
    bool IsPart(TreeNode* p1,TreeNode* p2) {
        if (!p2) return true; //p2树为空,则为真子树
        if (!p1 || p1->val != p2->val) return false; //p1为空,或者根节点不相同则为假
        return IsPart(p1->left,p2->left) && IsPart(p1->right,p2->right); //根结点相同,验证左子树和右子树是否相同
    }
};