Me ayudan con esta lista pls
Publicado por Jorge (24 intervenciones) el 15/08/2021 14:13:45
Hola estoy haciendo un code para automatizar un arbol binario de busqueda, pero bueno el codigo es largo y no importa mucho en si pero pasa que mi programa compila, pero no hace nada a partir de ciertas lineas,
miren pasa que no imprime la linea "Error en 2" solo imprime la "Error en 1" por lo que supongo la asignacion esta mal lo que quiero es copiar las estructuras directamente, pero la varible AUX_2 viene de otra funcion, no del main, no se si ese sea el detalle, no se que pueda ser, el resto del code no importa
void recorridoIzquierda(LIS *ARBOL, LIS *AUX_2){
LIS *P, *AUX_CENTRO;
LIS *AUX_1;
P= ARBOL;
printf("COMIENZA RECORRIDO IZQ");
while(1){
if( (P->IZQUIERDA!=NULL)&&(P->DERECHA!=NULL) ){
printf("empieza primero");
AUX_CENTRO= P;
P= P->DERECHA;
printf("ERROR EN 1");
*AUX_1= *P;
*P= *AUX_2;
printf("ERROR EN 2"); ///// AQUI EL DETALLE
*P= *AUX_CENTRO;
AUX_2->DERECHA= P->DERECHA; AUX_2->IZQUIERDA= P->IZQUIERDA;
printf("ERROR EN 3");
*AUX_2= *P; AUX_2->DERECHA= NULL; AUX_2->IZQUIERDA= NULL;
*P= *AUX_1;
printf("ERROR EN 4");
printf("TERMINA primero");
} else if( (P->IZQUIERDA!=NULL)&&(P->DERECHA==NULL) ){
*AUX_1= *P; AUX_1->DERECHA= NULL; AUX_1->IZQUIERDA= NULL;
AUX_3->DERECHA= P->DERECHA; AUX_3->IZQUIERDA= P->IZQUIERDA;
*P= *AUX_2;
P= P->IZQUIERDA;
*AUX_2= *AUX_1;
} else if( (P->IZQUIERDA==NULL)&&(P->DERECHA==NULL) ){
printf("empieza SEGUNDO");
if( AUX_2->EDAD > P->EDAD){
P->DERECHA= AUX_2;
} else P->IZQUIERDA= AUX_2;
printf("TERMINA SEGUNDO");
break;
} else if( (P->IZQUIERDA==NULL)&&(P->DERECHA!=NULL) ){
AUX_CENTRO= P;
P= P->DERECHA;
*AUX_1= *P;
*P= *AUX_2;
P= AUX_CENTRO;
AUX_1->DERECHA= P->DERECHA; AUX_1->IZQUIERDA= P;
*AUX_2= *P; P->DERECHA= NULL; P->IZQUIERDA= NULL;
*P= *AUX_1;
P->IZQUIERDA= AUX_2;
break;
}
P= P->IZQUIERDA; // VA DESPUES POR SI EL NODO QUE RECIBE ES EL ULTIMNO
}
printf("TERMINA RECORRIDO IZQ");
}
miren pasa que no imprime la linea "Error en 2" solo imprime la "Error en 1" por lo que supongo la asignacion esta mal lo que quiero es copiar las estructuras directamente, pero la varible AUX_2 viene de otra funcion, no del main, no se si ese sea el detalle, no se que pueda ser, el resto del code no importa
void recorridoIzquierda(LIS *ARBOL, LIS *AUX_2){
LIS *P, *AUX_CENTRO;
LIS *AUX_1;
P= ARBOL;
printf("COMIENZA RECORRIDO IZQ");
while(1){
if( (P->IZQUIERDA!=NULL)&&(P->DERECHA!=NULL) ){
printf("empieza primero");
AUX_CENTRO= P;
P= P->DERECHA;
printf("ERROR EN 1");
*AUX_1= *P;
*P= *AUX_2;
printf("ERROR EN 2"); ///// AQUI EL DETALLE
*P= *AUX_CENTRO;
AUX_2->DERECHA= P->DERECHA; AUX_2->IZQUIERDA= P->IZQUIERDA;
printf("ERROR EN 3");
*AUX_2= *P; AUX_2->DERECHA= NULL; AUX_2->IZQUIERDA= NULL;
*P= *AUX_1;
printf("ERROR EN 4");
printf("TERMINA primero");
} else if( (P->IZQUIERDA!=NULL)&&(P->DERECHA==NULL) ){
*AUX_1= *P; AUX_1->DERECHA= NULL; AUX_1->IZQUIERDA= NULL;
AUX_3->DERECHA= P->DERECHA; AUX_3->IZQUIERDA= P->IZQUIERDA;
*P= *AUX_2;
P= P->IZQUIERDA;
*AUX_2= *AUX_1;
} else if( (P->IZQUIERDA==NULL)&&(P->DERECHA==NULL) ){
printf("empieza SEGUNDO");
if( AUX_2->EDAD > P->EDAD){
P->DERECHA= AUX_2;
} else P->IZQUIERDA= AUX_2;
printf("TERMINA SEGUNDO");
break;
} else if( (P->IZQUIERDA==NULL)&&(P->DERECHA!=NULL) ){
AUX_CENTRO= P;
P= P->DERECHA;
*AUX_1= *P;
*P= *AUX_2;
P= AUX_CENTRO;
AUX_1->DERECHA= P->DERECHA; AUX_1->IZQUIERDA= P;
*AUX_2= *P; P->DERECHA= NULL; P->IZQUIERDA= NULL;
*P= *AUX_1;
P->IZQUIERDA= AUX_2;
break;
}
P= P->IZQUIERDA; // VA DESPUES POR SI EL NODO QUE RECIBE ES EL ULTIMNO
}
printf("TERMINA RECORRIDO IZQ");
}
Valora esta pregunta


0