Linz si te das cuenta en tu código tienes:
if (ptr != NULL){ //Si el puntero ptr no es nulo
delete(ptr); //Borramos el nodo
y
if (sig != NULL){ //Si el puntero sig no es nulo
delete(sig); //Borramos el nodo
}
Si ptr y sig son distinto de NULL los borras.. ahora bien que ocurre cuando ptr->ptr !=NULL o ptr->sig != NULL etc etc ? pues que al borrar ptr no puedes acceder al siguiente y borrarlo..
Resumiendo.. solo puedes borrar un Nodo cuando tanto ptr como sig son NULL
Para borrar el árbol entero tendrás que recorrerlo en profundidad usando una pila
Espero que esto te sirva para orientarte