Salve a tutti.
Ho fatto una funzione che mi stampi una struttura albero per livelli, dall'ultimo al primo, da sinistra a destra. La funzione è la seguente:
Con la struttura t_stack dichiarata nel seguente modo:codice:void stampa_per_livello(t_tree tree) { int dim_albero=n_albero(tree); int i =0; printf("La dimensione dell'albero e' %d :\n",dim); if(dim!=0) { t_stack stack=stack_create(dim); stack_push(&stack,*tree); while(!stack_is_full(stack)) { t_node temp=stack.item[i]; if(temp.right!=NULL && temp.left!=NULL) { stack_push(&stack,*(temp.right)); stack_push(&stack,*(temp.left)); } if(temp.right==NULL && temp.left!=NULL) stack_push(&stack,*(temp.left)); if(temp.right!=NULL && temp.left==NULL) stack_push(&stack,*(temp.right)); i++; } stampa_stack(stack); } }
Se inserisco dei nodi nell'albero, chiamo la funzione stampa_per_livello, e poi provo a inserire un ulteriore nodo nell'albero, la malloc nella funzione node_create fallisce:codice:struct s_stack { int n; t_node * item; int capacity; };
( in particolare entra nel primo if e poi viene attivata assert ).codice:t_node* node_create(t_info info) { printf("STO PER CREARE IL NODO\n"); t_node* new_node=(t_node*)malloc(sizeof(t_node)); if(new_node==NULL) { printf("Problemi con new_node\n"); assert(new_node!=NULL); } new_node->info=info; new_node->right=NULL;new_node->left=NULL; printf("STO PER FARE RETURN\n"); return new_node; }
Questa cosa non accade se non chiamo prima la funzione stampa_per_livello che in qualche modo deve creare problemi ( in che modo? ).
Esempio:
Inserisco tre nodi: 5, 6, 3 ( l'info dell'albero è un intero ). Poi chiamo la funzione stampa_per_livello e l'output è: 3-6-5. Provo a inserire 2 ed entra nell'if di cui prima...qualche consiglio?

Rispondi quotando