#include <stdio.h>
#include <stdlib.h>
#define LEN 4
struct albero{char nome_nodo;
int grado;
int padre;
int indice;
struct albero *pt_figli;
struct albero *p_next;
};
struct lista{char nome_nodo;
int padre;
};
struct coda{struct albero *info;
struct coda *p_next;
};
void main()
{struct albero *head=calloc(1,sizeof(struct albero)),*punt=head, *radice, *p_figli, *el_da_ins, *p_albero; //puntatori per creare la lista
struct coda *top, *bottom; struct albero *nodo; //puntatori per la coda per l'accesso all'albero
struct lista input[]={'A',-1,
'B', 2,
'C', 0,
'D', 0,
};
int i;
//CARICO TUTTO L'ARRAY IN UNA LISTA//
for(i=0; i<LEN; i++)
{if(i<LEN-1)
punt->p_next=calloc(1,sizeof(struct albero)); //evito che mi venga generato un elemento in più
punt->nome_nodo=input[i].nome_nodo;
punt->padre=input[i].padre;
punt->indice=i;
punt=punt->p_next;
}
punt=head;
while(punt!=NULL)
{if(punt->padre==-1)
{radice=punt;//cerco il nodo radice
printf("Radice trovata\n\n");
printf("Nome radice: %c\n",radice->nome_nodo);
}
else
{el_da_ins=punt;
p_albero=head; //scorro la lista per cercare il padre di quel nodo
while(p_albero!=NULL && p_albero->indice!=el_da_ins->padre)
{p_albero=p_albero->p_next;
printf("Cerco...\n");
}
if(p_albero->indice==el_da_ins->padre)
{printf("Trovato! in posizione: %d\n",p_albero->indice);
p_figli=p_albero;
while(p_figli->pt_figli!=NULL)
{p_figli=p_figli->pt_figli;
printf("Verifica: %c\n",p_figli->nome_nodo);
printf("Cerco primo nodo figlio libero\n");
}
p_figli->pt_figli=el_da_ins;
printf("Memoria allocata per il primo nodo figlio\n");
p_figli=p_figli->pt_figli;
printf("Puntatore figli in posizione\n");
// p_figli=el_da_ins;
printf("Inserisco un nodo:");
printf(" %c ",p_figli->nome_nodo);
printf("di indice: %d ",p_figli->indice);
printf("al padre: %c \n",p_albero->nome_nodo);
p_albero->grado++;
}
}
punt=punt->p_next;
}
punt=head;
while(punt!=NULL)
{printf("Nome: %c ",punt->nome_nodo);
printf("Grado: %d ",punt->grado);
p_figli=punt->pt_figli;
printf("Figli: ");
while(p_figli!=NULL)
{printf("%c", p_figli->nome_nodo);
p_figli=p_figli->pt_figli;
}
printf("\n\n");
punt=punt->p_next;
}
}