2012-11-25 4 views
2

J'ai trois fonctions Managa un arbre binaire:erreur de pointeur d'arbre binaire

static void insertion(Noeud* &top, Noeud *newNoeud) 
{ 
    if(top == NULL) 
     top = newNoeud; 
    else if(newNoeud->nbr < top->nbr) 
     insertion(top->left, newNoeud); 
    else 
     insertion(top->right, newNoeud); 
} 

static void affichage(Noeud* &top) //displaying 
{ 
    if(top != NULL) 
    { 
     affichage(top->left); 
     affichage(top->right); 
     cout << "\n" << top->nbr; 
    } 
} 

static Noeud* recherche(Noeud* &top, int nbr) //searching 
{ 
    while(top != NULL) 
    { 
     if(top->nbr == nbr) 
      return(top); 
     else if(nbr < top->nbr) 
      top = top->left; 
     else 
      top = top->right; 
    } 
} 

mais je continue à obtenir une erreur en disant que je viole l'accès lorsque vous essayez de lire un lieu de mémoire. Je devine que ceci a à voir avec mes pointeurs mais je ne peux pas deviner ce que c'est.

+1

Vouliez-vous dire C++? –

+0

Avez-vous essayé d'exécuter dans un débogueur? Où tombe-t-il exactement? Avez-vous essayé valgrind, si vous êtes sur Linux? – rutgersmike

+1

Depuis 'recherche statique * de Nœud (* & haut Nœud, int nbr)' signifie ce que cela signifie en C++, vous passez 'top' par référence,' top = top-> gauche, 'resp. 'top = top-> right;' détruira votre arbre. –

Répondre

1

le recherche change la top qui ne devrait pas.

Est-ce même compilé?

static Noeud* recherche(Noeud* &top, int nbr) //searching 
{ 
    while(top != NULL) 
    { 
     if(top->nbr == nbr) 
      return(top); 
     else if(nbr < top->nbr) 
      top = top->left; 
     else 
      top = top->right; 
    } 
} 

Cela ne revient pas toujours une valeur ...

devrait être quelque chose comme ça:

static Noeud* recherche(Noeud* &top, int nbr) //searching 
{ 
    Noeud* it = top; //use a temporary pointer for the search. 
    while(it != NULL) 
    { 
     if(it->nbr == nbr) 
      return(it); 
     else if(nbr < it->nbr) 
      it = it->left; 
     else 
      it = it->right; 
    } 
    return it; //always return a value. 
} 
1

Votre méthode de recherche rend votre nœud supérieur ne pointer vers top plus.

Questions connexes