>>286
改良版。sentryを有効活用。
int BSTdelete(keyType a_key)
{
  nodeType **pp = &head;
  nodeType *node;
  sentry->data.key = a_key;
  while (a_key != (*pp)->data.key) {
    pp = (a_key < (*pp)->data.key)? &(*pp)->left : &(*pp)->right;
  }
  if (*pp == sentry) return 0;
  node = *pp;
  if (node->left == node->right) *pp = sentry;
  else if (node->left == sentry) *pp = node->right;
  else if (node->right == sentry) *pp = node->left;
  else {
    nodeType *p = node->left;
    while (p->right != sentry) p = p->right;
    p->right = node->right;
    *pp = node->left;
  }
  free(node);
  return 1;
}
解説は夜になってしまうかも