input: 
  class TreeNode:
      def __init__(self, x):
          self.val = x
          self.left = None
          self.right = None
  
  def are_similar(root1, root2):
      if root1 is None and root2 is None:
          return True
      if root1 is None or root2 is None:
          return False
      if root1.val != root2.val:
          return False
      else:
          return are_similar(root1.left, root2.left) and are_similar(root1.right, root2.right)
  
  # Test cases
  root1 = TreeNode(1)
  root1.left = TreeNode(2)
  root1.right = TreeNode(3)
  
  root2 = TreeNode(1)
  root2.left = TreeNode(2)
  root2.right = TreeNode(3)
  
  root3 = TreeNode(1)
  root3.left = TreeNode(2)
  
  root4 = TreeNode(1)
  root4.left = TreeNode(3)
  root4.right = TreeNode(2)
  
  assert are_similar(root1, root2) == True
  assert are_similar(root1, root3) == False
  assert are_similar(root1, root4) == False
  
  # The output of the test cases will be the assertions not raising errors if the function works correctly.
  
output:     
      return are_similar(root1.left, root2.left) and are_similar(root1.right, root2.right)
  