input: Write a python function to construct a Binary Search Tree from a given array and traverse it in-order.
  assert inorderTraversal(constructBst([4, 3, 8, 15, 1, 5])) == [1, 3, 4, 5, 8, 15]
  assert inorderTraversal(constructBst([7, 3, 9, 2, 5, 8])) == [2, 3, 5, 7, 8, 9]
  assert inorderTraversal(constructBst([10, 5, 15, 3, 7, 12, 18])) == [3, 5, 7, 10, 12, 15, 18]
output: class TreeNode:
      def __init__(self, val=0, left=None, right=None):
          self.val = val
          self.left = left
          self.right = right
  
  def constructBst(array):
      if not array:
          return None
  
      def insert_into_bst(root, val):
          if not root:
              return TreeNode(val)
          if val < root.val:
              root.left = insert_into_bst(root.left, val)
          else:
              root.right = insert_into_bst(root.right, val)
          return root
  
      root = None
      for val in array:
          root = insert_into_bst(root, val)
      return root
  
  def inorderTraversal(root):
      result = []
      def inorder(node):
          if not node:
              return
          inorder(node.left)
          result.append(node.val)
          inorder(node.right)
      inorder(root)
      return result