class Solution {
    //中序遍历
    void Intrav(TreeNode *r, vector<int> &v)
{
    if(r != NULL)
    {
       
        Intrav(r->left, v);
        v.push_back(r->val);
        Intrav(r->right,v);
         
    }
    else return;
}
public:
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    {
        if(pRoot1==NULL||pRoot2==NULL)
            return false;
        //否则遍历两树
        vector<int> ivec1;
        vector<int> ivec2;
        Intrav(pRoot1,ivec1);
        Intrav(pRoot2,ivec2);
        int length=ivec2.size();
        //先在ivec1中查找出ivec2首个元素的位置
        int i=0;
     while(i<ivec1.size())
     {
         if(ivec1[i]==ivec2[0])//若在树1的中序遍历中的第i个位置找到了树2的根
         {
             int indexofvec2=1;
             for(int j=i+1;j<i+length;++j)//跳过树2的第一个点,逐个比较后面的点
             {
                 if(ivec1[j]!=ivec2[indexofvec2++])
                     return false;
             }
             return true;//
         }
         else
             ++i;   
     }
        return false;
    }
};