/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
#include <stack>
class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if(!pRoot1 || !pRoot2)return false;
stack<TreeNode*> stk;
stk.push(pRoot1);
while(!stk.empty()){
TreeNode* node = stk.top();stk.pop();
if(node->val == pRoot2->val && cheakif(node, pRoot2)){
return true;
}
if(node->right)stk.push(node->right);
if(node->left)stk.push(node->left);
}
return false;
}
bool cheakif(TreeNode* r1, TreeNode* r2){
if(!r2){
return true;
}else{
if(!r1)return false;
else{
if(r1->val != r2->val){return false;}
else{
return cheakif(r1->right, r2->right) && cheakif(r1->left, r2->left);
}
}
}
}
};