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;
}
};