input: Write a Python function to perform an in-order traversal on a binary tree and return the result as a list.
  assert in_order_traversal(BinaryTree()) == []
  bt = BinaryTree()
  bt.insert(5)
  bt.insert(3)
  bt.insert(7)
  assert in_order_traversal(bt) == [3, 5, 7]
  bt.insert(2)
  bt.insert(4)
  assert in_order_traversal(bt) == [2, 3, 4, 5, 7]
output: def in_order_traversal(tree):
      def traverse(node):
          if node is None:
              return []
          return traverse(node.left) + [node.value] + traverse(node.right)
      
      return traverse(tree.root)
  
  class Node:
      def __init__(self, value):
          self.value = value
          self.left = None
          self.right = None
  
  class BinaryTree:
      def __init__(self):
          self.root = None
      
      def insert(self, value):
          if self.root is None:
              self.root = Node(value)
          else:
              self._insert_recursive(self.root, value)
      
      def _insert_recursive(self, node, value):
          if value < node.value:
              if node.left is None:
                  node.left = Node(value)
              else:
                  self._insert_recursive(node.left, value)
          else:
              if node.right is None:
                  node.right = Node(value)
              else:
                  self._insert_recursive(node.right, value)