Problema inserimento albero N-ario tramite vettore

di Anonimizzato16980 il
8 risposte
La funzione proposta svolge se inserisco un primo elemento se voglio inserire altri elementi si perdono i puntatori. posto sia la funzione che la struttura.grazie per l' aiuto.
struct nodoalbero{
	   int info;
	   int numfigli;
	   struct nodoalbero **figli;
};
struct nodoalbero *inserimentoAlbero(struct nodoalbero *radice,int padre,int figlio){
	   int i=0;
	   if(radice==NULL){
	   		radice=(struct nodoalbero *)malloc(sizeof(struct nodoalbero));
			radice->info=figlio;
			radice->numfigli=0;
			radice->figli=(struct nodoalbero **)malloc(sizeof(struct nodoalbero *)*radice->numfigli);   			
	   }else
	   if(radice->info==padre){
	   		radice->figli=(struct nodoalbero **)realloc(radice->figli,radice->numfigli+1);
			radice->numfigli+=1;
			radice->figli[radice->numfigli]=newnodo(figlio);
			return radice;
       }else{
	   for(i=0;i<radice->figli[i];i++)
	         radice->figli[i]=inserimentoAlbero(radice->figli[i],padre,figlio);
       }		  						   				
	   return radice;	      						
}

struct nodoalbero *newnodo(int x){
	   struct nodoalbero *e=NULL;
	   e=(struct nodoalbero *)malloc(sizeof(struct nodoalbero));
	   e->info=x;
	   e->numfigli=0;
	   e->figli=(struct nodoalbero **)malloc(sizeof(struct nodoalbero *)*e->numfigli);
	   return e;
}

8 Risposte

  • Non ho controllato tutto ma questo

    radice->numfigli=+1;

    è sbagliato, dovrebbe essere

    radice->numfigli+=1;
  • Purtroppo non va lo stesso..
  • Quello era un errore, non ho detto che era la soluzione ...

    Anche quel for non mi convince proprio ...
  • Per scorrere l' albero ricorsivamente come faresti??
  • Dovrebbe essere quella con lista collegata.. Ma io uso degli array per i figli.
  • Scusa per il crossposting, ho cercato di avere risposte da altri forum ma nnt..
  • Scusami ma la definizione nella struct secondo te l ho fatta bene o manca qualcosa??
Devi accedere o registrarti per scrivere nel forum
8 risposte