¿Cuál es el problema con esta función

votos
1

hola yo estaba escribiendo un BST y escribió la siguiente función para añadir Niño.

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

Estoy dando 23 12 122 1 121 15 como entrada. Raíz es el nodo 23 que estoy creando en el constructor de la clase.

Problema: cuando estoy haciendo el recorrido del árbol que estoy recibiendo sólo el 23 y el 15 como salida. Pregunta : ¿Qué estoy haciendo mal en esta función?

Publicado el 23/12/2010 a las 10:42
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
1

Tratar:

if(value > temp1->getValue()) 

... de lo contrario su condición de inserción se diferencia de su búsqueda de un lugar en el ciclo anterior.

Respondida el 23/12/2010 a las 10:47
fuente por usuario

votos
1

Las condiciones se mezclan.

si (valor> TEMP-> getValue ()): Getright

es la opuesta a

si (temp1-> getValue ()> valor): Setright

Tratar simplemente de cambiar la última condición.

Respondida el 23/12/2010 a las 10:47
fuente por usuario

votos
0

Estoy de acuerdo con las respuestas anteriores por el capitán y sje, pero no explican la severa, deberíamos decir, baja población de su árbol. El posible problema es que agregue valor como hijo de Temp 1 , descartando hijo anterior por completo. Eso probablemente se hace en T :: setRightChild () y T :: setLeftChild () funciones.

Respondida el 23/12/2010 a las 10:52
fuente por usuario

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