


bool member(T e, node root)
  if root = nil, return false
  if root.data = e, return true
  if e < root.data
    return member(e, root.left)
  return member(e, root.right)
node * add(T e, node * root)
  if root = nil
    root = new node(data, nil, nil)
  or e < root.data
    root.left = add(e, root.left)
  or
    root.right = add(e, root.right)
  return root

node * remove(node * r)
  if r.left ≠ nil
    r.left = remove_max(r.left, r.data)
  or r.right ≠ nil
    r.right = remove_min(r.right, r.data)
  or
    delete r
    r = nil
  return r