input: Write a function to determine if a binary tree (S) is a subtree of another binary tree (T). If S is a subtree of T, return True; otherwise, return False. If either tree is empty, return True if both are empty, and False if only one is empty.
  
  Function signature: def isSubTree(T, S):
  
  assert isSubTree(None, None) == True
  assert isSubTree(Node(1), None) == True
  assert isSubTree(None, Node(1)) == False
  
  T1 = Node(3)
  T1.left = Node(4)
  T1.right = Node(5)
  T1.left.left = Node(1)
  T1.left.right = Node(2)
  
  S1 = Node(4)
  S1.left = Node(1)
  S1.right = Node(2)
  
  assert isSubTree(T1, S1) == True
  
  T2 = Node(3)
  T2.left = Node(4)
  T2.right = Node(5)
  T2.left.left = Node(1)
  T2.left.right = Node(2)
  T2.left.right.left = Node(0)
  
  S2 = Node(4)
  S2.left = Node(1)
  S2.right = Node(2)
  
  assert isSubTree(T2, S2) == False
  
  T3 = Node(3)
  T3.left = Node(4)
  T3.right = Node(5)
  T3.left.left = Node(1)
  T3.left.right = Node(2)
  
  S3 = Node(3)
  S3.left = Node(4)
  S3.right = Node(5)
  
  assert isSubTree(T3, S3) == True
  
  T4 = Node(1)
  T4.right = Node(2)
  
  S4 = Node(1)
  
  assert isSubTree(T4, S4) == True
output: def isSubTree(T, S):
      if T is None and S is None:
          return True
      if T is None or S is None:
          return False
      
      def isSameTree(T, S):
          if T is None and S is None:
              return True
          if T is None or S is None:
              return False
          return T.val == S.val and isSameTree(T.left, S.left) and isSameTree(T.right, S.right)
      
      if isSameTree(T, S):
          return True
      
      return isSubTree(T.left, S) or isSubTree(T.right, S)