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