Wat is het probleem met deze functie

stemmen
1

hi Ik was het schrijven van een BST en schreef volgende functie voor het toevoegen van Child.

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

Ik geef 23 12 122 1 121 15 als invoer. Root is knooppunt 23 die ik ben het creëren van in constructor van de klasse.

Probleem: Wanneer ik doe boom traversal krijg ik slechts 23 en 15 als output. Vraag : Wat doe ik verkeerd in deze functie?

De vraag is gesteld op 23/12/2010 om 10:42
bron van user
In andere talen...                            


3 antwoorden

stemmen
1

Proberen:

if(value > temp1->getValue()) 

... anders invoegpositie toestand verschilt van zoeken naar een plek in de lus te kiezen.

antwoordde op 23/12/2010 om 10:47
bron van user

stemmen
1

De voorwaarden worden door elkaar.

if (waarde> TEMP-> getValue ()): GetRight

is het tegenovergestelde

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

Probeer alleen het veranderen van de laatste voorwaarde.

antwoordde op 23/12/2010 om 10:47
bron van user

stemmen
0

Ik ben het eens met eerdere antwoorden door kapitein en SJE, maar ze hebben niet de strenge uit te leggen, moeten we zeggen, onderbevolking van uw boom. De mogelijke probleem is dat u toevoegt waarde als een kind van temp1 , weggooien eerder kind helemaal. Dat is waarschijnlijk gedaan in T :: setRightChild () en T :: setLeftChild () functies.

antwoordde op 23/12/2010 om 10:52
bron van user

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