Qual è il problema con questa funzione

voti
1

hi stavo scrivendo un BST e scrisse seguente funzione per l'aggiunta del bambino.

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

Io sto dando 23 12 122 1 121 15 come input. Radice è il nodo 23 che sto creando nel costruttore della classe.

Problema: quando sto facendo attraversamento di alberi sto ottenendo solo il 23 e il 15 come uscita. Domanda : Che cosa sto facendo di sbagliato in questa funzione?

È pubblicato 23/12/2010 alle 10:42
fonte dall'utente
In altre lingue...                            


3 risposte

voti
1

Provare:

if(value > temp1->getValue()) 

... altrimenti la vostra condizione di inserimento differisce dalla ricerca di un posto nel ciclo sopra.

Risposto il 23/12/2010 a 10:47
fonte dall'utente

voti
1

Le condizioni si confondono.

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

è l'opposto di

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

Provate solo cambiando l'ultima condizione.

Risposto il 23/12/2010 a 10:47
fonte dall'utente

voti
0

Sono d'accordo con le risposte precedenti dal capitano e SJE, ma non spiegano la grave, dovremmo dire, sottopopolazione del vostro albero. Il problema possibile è che si aggiunge valore come figlio di temp1 , scartando bambino precedente del tutto. Questo è probabilmente fatto in T :: setRightChild () e T :: setLeftChild () funzioni.

Risposto il 23/12/2010 a 10:52
fonte dall'utente

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