Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C]Problemi con gli alberi binari nell'ordinare una lista di numeri

    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?
    "I don't know anything, but I do know that everything is interesting if you go into it deeply enough."(Richard P. Feynman)

    “Don’t waste time living someone else’s life. Stay hungry. Stay Foolish” (Steve Jobs)

  2. #2
    Ciao,
    nei vari scanf prova con la parnetesi
    (fscanf(tex,"%d",&(totN->number))

    & ha priorità superiore a ->

  3. #3
    In effetti era quello il problema ti ringrazio!
    "I don't know anything, but I do know that everything is interesting if you go into it deeply enough."(Richard P. Feynman)

    “Don’t waste time living someone else’s life. Stay hungry. Stay Foolish” (Steve Jobs)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.