Hva er problemet med denne funksjonen

stemmer
1

hei jeg skrev en BST og skrev følgende funksjon for å legge 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));  
  }  
}  

Jeg gir 23 12 122 1 121 15 som input. Root er node 23 som jeg skaper i konstruktøren av klassen.

Problem: Når jeg gjør tre traversering jeg får bare 23 og 15 som utgang. Spørsmål : Hva gjør jeg galt i denne funksjonen?

Publisert på 23/12/2010 klokken 09:42
kilden bruker
På andre språk...                            


3 svar

stemmer
1

Prøve:

if(value > temp1->getValue()) 

... ellers innsetting tilstand avviker fra søket etter en plass i løkken ovenfor.

Svarte 23/12/2010 kl. 09:47
kilden bruker

stemmer
1

Forholdene er blandet sammen.

if (verdi> TEMP> getValue ()): GetRight

er det motsatte

if (temp1-> getValue ()> verdi): setRight

Prøv bare endret den siste betingelsen.

Svarte 23/12/2010 kl. 09:47
kilden bruker

stemmer
0

Jeg er enig med tidligere svar av kaptein og sje, men de har ikke forklare alvorlig, skal vi si, underpopulation av treet. Den mulige problemet er at du legger verdi som et barn av temp1 , forkaster tidligere barnet helt. Det er trolig gjort i T :: setRightChild () og T :: setLeftChild () funksjoner.

Svarte 23/12/2010 kl. 09:52
kilden bruker

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