input: Write a function to determine if a given binary tree is a subtree of another binary tree. The function should return True if the first tree is a subtree of the second tree, otherwise return False. If either of the trees is empty, return the appropriate logical result.
  
  
  def isSubTree(T, S):
      if S is None: 
          return True
      if T is None: 
          return False
      if areIdentical(T, S): 
          return True
      return isSubTree(T.left, S) or isSubTree(T.right, S) 
  
  def areIdentical(T, S): 
      if T is None and S is None: 
          return True
      if T is None or S is None: 
          return False
      return (T.data == S.data and areIdentical(T.left, S.left) and areIdentical(T.right, S.right))
  
  
  
  # Test cases
  assert isSubTree(None, None) == True
  assert isSubTree(Node(1), None) == False
  assert isSubTree(None, Node(1)) == True
  
  # Example trees
  root = Node(26) 
  root.right = Node(3) 
  root.right.right = Node(3) 
  root.left = Node(10) 
  root.left.left = Node(4) 
  root.left.left.right = Node(30) 
  root.left.right = Node(6) 
  
  subRoot = Node(10) 
  subRoot.right = Node(6) 
  subRoot.left = Node(4) 
  subRoot.left.right = Node(30) 
  
  assert isSubTree(root, subRoot) == True
  
  # Different example
  otherRoot = Node(26) 
  otherRoot.right = Node(3) 
  otherRoot.right.right = Node(2) 
  otherRoot.left = Node(10) 
  otherRoot.left.left = Node(4) 
  otherRoot.left.left.right = Node(31) 
  otherRoot.left.right = Node(6) 
  
  assert isSubTree(otherRoot, subRoot) == False
  
output: def isSubTree(T, S):
      if S is None: 
          return True
      if T is None: 
          return False
      if areIdentical(T, S): 
          return True
      return isSubTree(T.left, S) or isSubTree(T.right, S) 
  
  def areIdentical(T, S): 
      if T is None and S is None: 
          return True
      if T is None or S is None: 
          return False
      return (T.data == S.data and areIdentical(T.left, S.left) and areIdentical(T.right, S.right))