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:
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?