bucle infinito: Proceso que no termina correctamente

votos
0
struct node
{
    int data;
    node* left;
    node* right;
};

int secondlargest(struct node* a)
{
    while(a->right != NULL){
        secondlargest(a->right);
    }
    return a->data;
}

No soy capaz de rastrear donde he hecho el error y por qué no es salir del bucle while.

Publicado el 04/03/2011 a las 02:35
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
1

Su error es que no se debe utilizar un tiempo, pero en cambio un caso porque es recursivo, pero ¿qué es lo que desea la función para volver? los datos del último miembro? Si lo que debe ser la siguiente:

int secondlargest(struct node* a) {
   if(a == NULL) return -1;
   secondlargestr(a);
}

int secondlargestr(struct node* a) {
   if(a->right!=NULL) return secondlargest(a->right);
   return (a->data);
}
Respondida el 04/03/2011 a las 02:41
fuente por usuario

votos
0

Si insiste en la versión recursiva, cambie el tiempo para si.

int secondlargest(node* a)
{
    if(a == null){
        // if the first node is already NULL
        return -1;
    }
    if(a->right == NULL){
        return a->data;
    }else{
        return secondlargest(a->right);
    }
}

Fundamentos de la recursividad:

  • Debe tener caso base
  • Divida tamaño del problema de forma recursiva

Si desea que la forma iterativa:

int secondlargest(node* a)
{
    node* temp = a;
    int data = -1;
    while(temp != null){
        data = temp->data;
        temp = temp->right;
    }
    return data;
}
Respondida el 04/03/2011 a las 02:42
fuente por usuario

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