/*
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);
				}
			}
		}
	}
};