Devo creare una funzione che dato in ingresso un albero binario deve creare un copia del nodo nel figlio sinistro.
Il risultato dovrebbe essere questo:
6sqC0TO.jpeg immagine.
codice:
void double_tree(Tnode *albero){
  Tnode aux, albero2 = *albero;
  
  if(*albero != NULL)
  {
    
      if((*albero) -> sx == NULL)
      {
        (*albero) -> sx = malloc(sizeof(Tree));
        (*albero) -> sx -> label = (*albero) -> label;
        (*albero) -> sx -> sx = NULL;
      }
      if((*albero) -> sx != NULL)
      {
        aux = (*albero) -> sx;
        (*albero) -> sx = malloc(sizeof(Tree));
        (*albero) -> sx -> label = (*albero) -> label;
        (*albero) -> sx -> sx = malloc(sizeof(Tree));
        (*albero) -> sx -> sx = aux;
        /*correzione in fondo*/
      }
    
  }
  double_tree(&((*albero) -> sx));
  double_tree(&((*albero) -> dx));
}
Una volta compilato il programma va in segmentation fault ... il problema e che la funzione continua a inserirmi lo stesso nodo all'infinito... ho provato a modificare la funzione diverse volte, per esempio introducendo un nuovo puntatore alla struttura Tree (albero2), eguagliandolo a *albero e inserendo un while all'inzio della funzione (ma dopo la prima condizione dell'if) che faceva spostare il puntatore di albero2 al figlio sinistro fino a che non fosse stato diverso dalla sua etichetta.
Il codice
� il seguente:
codice:

codice:
void double_tree(Tnode *albero)
{
  Tnode aux, albero2 = *albero;
  
  if(albero2 != NULL)
  {
     while(albero2 == albero2 -> sx)
        albero2 = albero2 -> sx;
      
      if(albero2 -> sx == NULL)
      {
        albero2 -> sx = malloc(sizeof(Tree));
        albero2 -> sx -> label = albero2 -> label;
        albero2 -> sx -> sx = NULL;
      }
       
      
      if((*albero) -> sx != NULL)
      {
        aux = albero2 -> sx;
        albero2 -> sx = malloc(sizeof(Tree));
        albero2 -> sx -> label = albero2 -> label;
        albero2 -> sx -> sx = malloc(sizeof(Tree));
        albero2 -> sx -> sx = aux;
      }
  }
  double_tree(&((*albero) -> sx));
  double_tree(&((*albero) -> dx));
}
La struttura dell'albero l'ho dichiarata cosi:
codice:
typedef struct tree
{
  int label;
  struct tree *sx;
  struct tree *dx;
} Tree;
typedef Tree *Tnode;

Ma continua a non funzionare... qualcuno potrebbe aiutarmi?