2013-07-21 4 views
0

J'ai un très sérieux problème. J'ai un arbre binaire et je veux me déplacer dans l'arbre pendant que je trouve un noeud exact. J'ai ce code:Fonction pour trouver un nœud se bloque

template<class T> 
void Tree<T>::CheckTwoTimes(Node<T> *node, Node<T> *original) 
{ 
    if(node == original) cout << "This is it" << endl; 
    CheckTwoTimes(node->Left, original); //It gives error here 
    CheckTwoTimes(node->Right, original);//And maybe it will give it here 
} 

original est le nœud que je cherche. Mais quand je cours le programme il se bloque juste et me montre sur quelle ligne est le problème. Je ne sais pas ce qui ne va pas. Peut-être que je ne passe pas le paramètre du pointeur comme il se doit.

j'appelle la fonction de cette façon:

CheckTwoTimes(root, find); //**find** is for example the most left node 
+3

Vous devez probablement effectuer des vérifications nuls si les enfants sont NULL. Le déréférencement nul entraînera une erreur. Ce qui me rappelle. Quelle erreur obtenez vous? – Borgleader

+0

Merci beaucoup. Cela a aidé. Je n'ai pas eu une erreur de compilation ordinaire. J'utilise Visual Studio 2010 et quand je cours le programme il plante et une petite flèche jaune apparaît dans le code avant la ligne. –

Répondre

1

À un moment donné, vous allez arriver à un nœud feuille - lorsque cela se produit node va être NULL et vous allez essayer de déréférencer ça (ce qui n'est pas bon).

Vous devez ajouter un chèque de NULL:

template<class T> 
void Tree<T>::CheckTwoTimes(Node<T> *node, Node<T> *original) 
{ 
    if (node == NULL) 
     return; 
    if (node == original) 
     cout << "This is it" << endl; 
    CheckTwoTimes(node->Left, original); 
    CheckTwoTimes(node->Right, original); 
} 

Si les nœuds de l'arbre sont uniques, il est peut-être aussi une bonne idée de retourner un pointeur vers le nœud plutôt que d'imprimer quelque chose.