struct bst_node *s; for (;;) { s = r->bst_link[0]; if (s->bst_link[0] == NULL) break; r = s; } r->bst_link[0] = s->bst_link[1]; s->bst_link[0] = p->bst_link[0]; s->bst_link[1] = p->bst_link[1]; q->bst_link[dir] = s;