V čem je problém s touto funkcí

hlasů
1

hi Byl jsem psát BST a napsal následující funkce pro přidání dítě.

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

Dávám 23 12 122 1 121 15 jako vstup. Kořen je uzel 23, který tvořím v konstruktoru třídy.

Problém: Když dělám strom traversal jsem dostat jen 23 a 15 jako výstup. Otázka : Co dělám špatně v této funkci?

Položena 23/12/2010 v 10:42
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
1

Snaž se:

if(value > temp1->getValue()) 

... jinak se váš stav vložení liší od vyhledávání na místě, ve smyčce výše.

Odpovězeno 23/12/2010 v 10:47
zdroj uživatelem

hlasů
1

Tyto podmínky jsou smíchány.

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

je naproti

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

Zkuste pouhou výměnou poslední podmínku.

Odpovězeno 23/12/2010 v 10:47
zdroj uživatelem

hlasů
0

Souhlasím s předchozími odpověďmi kapitán a SJE, ale nemají vysvětlit závažné, měli bychom říci, underpopulation vašeho stromu. Možným problémem je, že přidáte hodnotu jako dítě temp1 , odhazovat předchozí dítě úplně. Který je pravděpodobně provedena v T :: setRightChild () a funkce T :: setLeftChild ().

Odpovězeno 23/12/2010 v 10:52
zdroj uživatelem

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