ciclo infinito: processo non termina correttamente

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

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

Io non sono in grado di rintracciare dove ho fatto l'errore e perché la sua non esce dal ciclo while.

È pubblicato 04/03/2011 alle 02:35
fonte dall'utente
In altre lingue...                            


2 risposte

voti
1

Il tuo errore è che non si dovrebbe usare un po ', ma invece un caso perché è ricorsiva, ma che cosa si desidera che la funzione di tornare? i dati dell'ultimo utente? Se è così che dovrebbe essere simile a questo:

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);
}
Risposto il 04/03/2011 a 02:41
fonte dall'utente

voti
0

Se si insiste sulla versione ricorsiva, modificare il tempo per se.

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

Nozioni di base di ricorsione:

  • Deve avere caso base
  • Abbattere dimensione del problema in modo ricorsivo

Se si desidera che il modo iterativo:

int secondlargest(node* a)
{
    node* temp = a;
    int data = -1;
    while(temp != null){
        data = temp->data;
        temp = temp->right;
    }
    return data;
}
Risposto il 04/03/2011 a 02:42
fonte dall'utente

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