Quel est le problème avec cette fonction

voix
1

salut je en train d'écrire un BST et a écrit fonction suivante pour ajouter des enfants.

void addChild(T value)  
{  
  temp = root;  
  while(0 != temp)  
  {  
     temp1 = temp;  
     if(value  > temp->getValue())  
          temp = temp->getRightChild();   
      else  
           temp = temp->getLeftChild();  
  }  
  if(temp1->getValue() > value)  
  {   
       temp1->setRightChild(new Child(value));  
  }  
  else  
  {  
       temp1->setLeftChild(new Child(value));  
  }  
}  

Je donne 23 12 122 1 121 15 en entrée. Racine est le nœud 23 que je crée dans le constructeur de la classe.

Problème: Quand je fais traversal arbre je reçois seulement 23 et 15 en sortie. Question : Qu'est - ce que je fais mal dans cette fonction?

Créé 23/12/2010 à 10:42
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
1

Essayer:

if(value > temp1->getValue()) 

... sinon votre état d'insertion diffère de votre recherche d'un endroit dans la boucle au-dessus.

Créé 23/12/2010 à 10:47
source utilisateur

voix
1

Les conditions sont mélangés.

if (value> tentation> getValue ()): getRight

est à l'opposé de

if (temp1-> getValue ()> valeur): Setright

Essayez juste changer la dernière condition.

Créé 23/12/2010 à 10:47
source utilisateur

voix
0

Je suis d' accord avec les réponses précédentes par le capitaine et SJE, mais ils ne l'explique pas grave, devrions - nous dire, de votre arbre sous -population . Le problème est possible que vous ajoutez la valeur en tant qu'enfant de temp1 , jeter enfant précédent tout à fait. Cela est probablement fait dans T :: fonctions setRightChild () et T :: setLeftChild ().

Créé 23/12/2010 à 10:52
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more