PDA

Visualizza la versione completa : [C]Problemi con gli alberi binari nell'ordinare una lista di numeri


xavier310
15-12-2012, 13:42
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è



#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?

Roby.zip
17-12-2012, 09:38
Ciao,
nei vari scanf prova con la parnetesi
(fscanf(tex,"%d",&(totN->number))

& ha priorità superiore a ->

xavier310
18-12-2012, 10:11
In effetti era quello il problema :D ti ringrazio!

Loading