Listing 3
void internal_clear( node_base* n ) { while( n != data_ ) { if( n->left != 0 ) { n = n->left; } else if( n->right != 0 ) { n = n->right; } else { node_base* p = n->parent; if( p->left == n ) { p->left = 0; } else if( p->right == n ) { p->right = 0; } destroy( n ); n = p; } } }