Ragazzi in un algoritmo di creazione BST ( alberi ) , inserimento elemennti nell'albero, e visualizzazione degli elementi nella compilazione non mi da errore, ma nell'eseguibile non visualizza i dati, ed esce senza aver dato nulla in output, dov'è l'errore ?

codice:
#include<iostream>

using namespace std;

typedef struct nodo{ 
                    int info;
                    nodo *left;
                    nodo *right;
                    }tree;

void insert(tree *&root,int elem);
void symmetric_order(tree *root);
void pre_order(tree *root);
void post_order(tree *root);





int main()
{ tree *root,*prev;
  int elem;
  char scelta;
  root=NULL;
  do 
   {cout<<"Inserisci il valore "<<endl;
    cin>>elem;
    insert(root,elem);
    cout<<"Vuoi inserire un altro elemento?"<<endl;
    cin>>scelta;
   }
   while((scelta=='y')||(scelta=='Y'));
   cout<<root->info;
   cout<<root->left;
   cout<<root->right;
   system("PAUSE");
   cout<<"\n Digita 1 per visualizzare l'albero in symmetric-order";
   cout<<"\n Digita 2 per visualizzare l'albero in pre-order";
   cout<<"\n Digita 3 per visualizzare l'albero in post-order  ";
   cin>>scelta;
   switch(scelta)
            {case 1:
                    {symmetric_order(root);
                     break;}
             case 2:
                    {pre_order(root);
                    break;}
             case 3:
                    {post_order(root);
                    break;}
             }
             
   
  system("PAUSE");
  return 0;
}




void symmetric_order(tree *root)
{     if(root==NULL)
        return;
      else
            {symmetric_order(root->left);
             cout<<root->info;
             cout<<"  ";
             symmetric_order(root->right);
             }
      return;
} 

void pre_order(tree *root)
{    if(root==NULL)
        return;
      else
            {pre_order(root->left);
             pre_order(root->right);
             cout<<root->info;
             cout<<"  ";
             }
      return;
} 

void post_order(tree *root)
{     if(root==NULL)
        return;
      else
            {post_order(root->right);
             post_order(root->left);
             cout<<root->info;
             cout<<"  ";
             }
      return;
} 

 void insert(tree *&root,int elem)
  {tree *new_node;
   if(root==NULL)
   {
       new_node=new tree;
       new_node->info=elem;
       new_node->left=NULL;
       new_node->right=NULL;
       root=new_node;
        }
    else
        {if(elem<root->info)
               insert(root->left,elem);
         else if(elem>root->info)
               insert(root->right,elem);
               else
                    cout<<"\n Già inserito ";
               }
    return;
}