Care este problema cu această funcție

voturi
1

hi Am fost scris un BST și a scris următoarea funcție pentru adăugarea de copii.

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));  
  }  
}  

Eu da 23 12 122 1 121 15 ca intrare. Root este nodul 23 care i-am crea în constructorul clasei.

Problemă: Atunci când i - am face parcurgeri copac i sînt achiziþie doar 23 și 15 ca ieșire. Întrebare : Ce fac greșit în această funcție?

Întrebat 23/12/2010 la 10:42
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
1

Încerca:

if(value > temp1->getValue()) 

... altfel starea dumneavoastră de inserare diferă de căutarea pentru un loc în bucla de mai sus.

Publicat 23/12/2010 la 10:47
sursa de către utilizator

voturi
1

Condițiile sunt amestecate.

dacă (valoare> temp-> getvalue ()): Getright

este opusul

if (temp1-> getvalue ()> valoare): setRight

Încercați doar să schimbați ultima condiție.

Publicat 23/12/2010 la 10:47
sursa de către utilizator

voturi
0

Sunt de acord cu răspunsurile anterioare de căpitanul și sje, dar nu explica severe, trebuie să spunem, subpopulare copacului tau. Posibila Problema este că adăugați valoare ca un copil de TEMP1 , aruncând copilul anterior cu totul. Aceasta este , probabil , face în T :: setRightChild () și T :: setLeftChild () funcții.

Publicat 23/12/2010 la 10:52
sursa de către utilizator

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