Ciao,
codice:
          root = insertion ( root, v );
con il codice scritto così è normale che tu modifichi sempre la root del tuo albero, e che quindi il tuo albero sarà sempre composto da un solo elemento, in qusto caso l'ultimo che inserisci.

Te invece devi modificarla solamente se l'albero è vuoto, negli altri casi la root rimane quella che è, io penso che ci siano delle modifiche da fare:

1) una è controllare questa eventualità ed agire di conseguenza..

2) Un'altra invece è nella funzione di inserimento nell'albero, in cui per lo stesso motivo, se inserisci a destra è il ramo destro a dover essere modificato (ptr->right) e non (ptr), stessa cosa per il sinistro.