/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
	bool DoesTree1HaveTree2(TreeNode* pRoot1, TreeNode* pRoot2) {
		// 如果B树为空,说明已遍历完
		if (pRoot2 == nullptr) return true;
		// 如果A树为空,说明B树还没遍历完
		if (pRoot1 == nullptr) return false;
		// 比较根节点值
		if (pRoot1->val != pRoot2->val) return false;
		// 走得通,则再递归判断子树
		return DoesTree1HaveTree2(pRoot1->left, pRoot2->left) && DoesTree1HaveTree2(pRoot1->right, pRoot2->right);
	}
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
		bool result = false;
		if (pRoot1 != nullptr && pRoot2 != nullptr) {
			if (pRoot1->val == pRoot2->val)
				result = DoesTree1HaveTree2(pRoot1, pRoot2);
			if (!result)
				result = HasSubtree(pRoot1->left, pRoot2);
			if (!result)
				result = HasSubtree(pRoot1->right, pRoot2);
		}
		return result;
    }
};