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è
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;
}
sapreste spiegarmi il perchè e dove sbaglio?