Na czym polega problem z tej funkcji

głosy
1

Cześć Pisałem BST i napisał następującą funkcję dodawania dziecka.

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

Daję 23 12 122 1 121 15 jako wejście. Korzeniem jest węzeł 23, który tworzę w konstruktorze klasy.

Problem: Kiedy robię przechodzenie drzewa otrzymuję tylko 23 i 15 jako wyjście. Pytanie : Co robię źle w tej funkcji?

Utwórz 23/12/2010 o 10:42
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
1

Próbować:

if(value > temp1->getValue()) 

... inaczej twój stan wstawiania różni się od poszukiwania miejscu w pętli powyżej.

Odpowiedział 23/12/2010 o 10:47
źródło użytkownik

głosy
1

Warunki są pomieszane.

if (value> temp-> getValue ()): GetRight

Jest to przeciwieństwem

if (wartość temp1-> getValue ()>): setRight

Spróbuj po prostu zmianie ostatniego warunku.

Odpowiedział 23/12/2010 o 10:47
źródło użytkownik

głosy
0

Zgadzam się z poprzednich odpowiedzi przez kapitana i SJE, ale nie wyjaśniają ciężka, powinniśmy powiedzieć, niedoludnienia swojego drzewa. Ewentualny problem, że dodasz wartość jako dziecko temp1 , odrzucając poprzedni dziecko w ogóle. Prawdopodobnie jest to zrobić w T :: setRightChild () i funkcje T :: setLeftChild ().

Odpowiedział 23/12/2010 o 10:52
źródło użytkownik

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