Salve ragazzi! Potreste darmi una mano a capire alcune parti che riguardano questo codice sugli alberi binari per leggere un testo e ordinare le parole. Ci sono alcune cose che non funzionano e non riesco a capire perchè
sapreste spiegarmi il perchè e dove sbaglio?codice:#include <stdio.h> #include <stdlib.h> struct node{ int number; struct node *up,*left,*right; }; typedef struct node myNode; void AddNode(myNode *new, myNode *root ); //aggiunge un nodo all'albero myNode *minimun(myNode *pNode); //trova il minimo //una volta trovato il minimo "dovrebbe" risalire per trovare il termine successivo myNode *nextItem(myNode *pNode); int main(){ int i=0; int n; FILE *tex=fopen("file.txt","r"); myNode *totN=(myNode*)malloc(100*sizeof(myNode)); myNode *root=(myNode*)malloc(100*sizeof(myNode)); /*inizializzo la radice dell'albero*/ root->up=NULL; root->left=NULL; root->right=NULL; /*gli do il primo elemento, e qui sorge il prima problema: nel file h una lista di numeri interi tutti diversi da zero, e il primo valore che mi va a eggere è uno zero! Why^? fscanf(tex,"%d",&totN->number); root->number=totN->number; /*poi leggo gli altri elementi*/ while((fscanf(tex,"%d",&totN->number))!=EOF){ AddNode(totN,root); } fclose(tex); /*qui tento di metterli in ordine ma niente non ne vuole sapere! Eppure l'algoritmo all'interno della funzione nexItem dovrebbe essere corretto! myNode *pNext; while(i<10){ i++; pNext=nextItem(root); } exit(1); } ////////////////////////////////////////////// void AddNode(myNode *new, myNode *root ){ new->right=NULL; new->left=NULL; if(new->number < root->number){ if(root->left==NULL){ root->left=new; new->up=root; }else{ AddNode(new,root->left); } } else{ if(new->number > root->number){ root->right=new; new->up=root; }else{ AddNode(new,root->right); } } } /////////////////////////////////////////////////// myNode *minimun(myNode *pNode){ while(pNode->left!=NULL){ pNode=pNode->left; } return pNode; } /////////////////////////////////////////////////////////////////////// myNode *nextItem(myNode *pNode){ myNode *pParent=pNode->up; if(pNode->right != NULL){ return minimun(pNode->right); } while (pParent != NULL && pNode == pParent->right){ pNode=pParent; pParent = pNode -> up; } // printf("%d\n",pParent->number); return pParent; }

Rispondi quotando
ti ringrazio!
