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;
}
}
}