function insert(node, value):
   if node is null:

      return TreeNode(value)
   if value < node.value:
      node.left = insert(node.left, value)
   else:
      node.right = insert(node.right, value)

   return node

 function search(node, value):
   if node is null:
      return false

   if value == node.value:
      return true
   if value < node.value:
      return search(node.left, value)
   return search(node.right, value) # both average O(log n), worst case O(n)
