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?