[C] inserire elementi in un albero
Ciao. Sto cercando di capire come inserire elementi in un albero, in molti esempi viene preso da file, ma preferirei evitare, sto cercando di inserire gli elementi o presi da tastiera o di un array nel main.
La funzione di inserimento penso sia giusta:
ma appunto nel main ho cambiato più volte e mi da continui errori, sia provando a prenderli da un array con elementi già scritti, sia prendendo gli elementi da tastiera.
Forse sbaglio anche nell'applicare la funzione insert_inorder:
struct btree *ptrptr;
init(&ptrptr);
insert_inorder(&ptrptr, value)
Grazie, sto cercando di prepararmi ad un esame.
La funzione di inserimento penso sia giusta:
struct btree{ int value; struct btree *left_ptr; struct btree *right_ptr; }; void init(struct btree**ptrptr); void insert_inorder(struct btree**ptrptr,int value); [...] // main void insert_inorder(struct btree **ptrptr, int value){ if(*ptrptr!=NULL){ if(value<=(*ptrptr)->value) insert_inorder(&((*ptrptr)->left_ptr),value); else insert_inorder(&((*ptrptr)->right_ptr),value); } else { (*ptrptr)=(struct btree *)malloc(sizeof(struct btree)); (*ptrptr)->value=value; (*ptrptr)->left_ptr=NULL; (*ptrptr)->right_ptr=NULL; } }
ma appunto nel main ho cambiato più volte e mi da continui errori, sia provando a prenderli da un array con elementi già scritti, sia prendendo gli elementi da tastiera.
Forse sbaglio anche nell'applicare la funzione insert_inorder:
struct btree *ptrptr;
init(&ptrptr);
insert_inorder(&ptrptr, value)
Grazie, sto cercando di prepararmi ad un esame.
Risposte
Quali errori incontri? Cosa fa la funzione init? La funzione insert_inorder mi sembra corretta, ma non potendo ovviamente compilare un programma completo è difficile dirlo con certezza.
La funzione init, guardando altri esempi di programma, pensavo fosse necessaria per scrivere init(&ptrTree) nel main, però in effetti non saprei come scrivere la vera e propria funzione init quindi l'ho tolta.
La funzione insert_inorder sono praticamente sicura sia corretta guardando il libro, solo che non so come passare all'azione, cioè come usarla per inserire i valori nell'albero. Inserendoli da tastiera ad esempio.
per prenderli da tastiera ho definito questa seconda funzione.
e forse li prende unendo questa funzione a insert_inorder
La funzione insert_inorder sono praticamente sicura sia corretta guardando il libro, solo che non so come passare all'azione, cioè come usarla per inserire i valori nell'albero. Inserendoli da tastiera ad esempio.
per prenderli da tastiera ho definito questa seconda funzione.
void getvalue(int *value){ printf("inserisci un valore"); scanf("%d",value); }
e forse li prende unendo questa funzione a insert_inorder
struct bere *ptrptr; //ciclo for get value(&value); insert_inorder(&ptrptr,value);
Il metodo più semplice (per esempio prendendo i valori da un array) è attraverso un semplice ciclo:
for (int i = 0; i < N; ++i) { insert_inorder(&ptrptr, A[i]); }