/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/


class Solution {
public:
  /*
  * @param T1: The roots of binary tree T1.
  * @param T2: The roots of binary tree T2.
  * @return: True if T2 is a subtree of T1, or false.
  */
  bool isSubtree(TreeNode *T1, TreeNode *T2) {
  if (T2 == NULL) {
    return 1;
  }
  if (T1 == NULL) {
    return 0;
  }

  if (isEqual(T1, T2)) {
    return 1;
  }
  if (isSubtree(T1->left, T2) || isSubtree(T1->right, T2)) {
    return 1;
  }
  return 0;
  }

  bool isEqual(TreeNode *T1, TreeNode *T2) {
  if (T1 == NULL || T2 == NULL) {
    return T1 == T2;
  }
  if (T1->val != T2->val) {
    return 0;
  }
  return isEqual(T1->left, T2->left) && isEqual(T1->right, T2->right);
  }
};