Oneindige lus: Proces niet goed beëindiging

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

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

Ik ben niet in staat op te sporen, waar heb ik de fout gedaan en waarom het niet uit de while lus.

De vraag is gesteld op 04/03/2011 om 02:35
bron van user
In andere talen...                            


2 antwoorden

stemmen
1

Uw fout is dat je niet een tijdje moeten gebruiken, maar in plaats daarvan een if omdat het recursieve, maar wat wil je de functie om terug te keren? de gegevens van het laatste lid? zo ja, het zou moeten zijn als volgt:

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);
}
antwoordde op 04/03/2011 om 02:41
bron van user

stemmen
0

Als u aandringen op de recursieve versie, veranderen de tijdje om indien.

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

Basis van recursie:

  • Moet base case hebben
  • Breek probleem grootte recursief

Als u wilt dat de iteratieve manier:

int secondlargest(node* a)
{
    node* temp = a;
    int data = -1;
    while(temp != null){
        data = temp->data;
        temp = temp->right;
    }
    return data;
}
antwoordde op 04/03/2011 om 02:42
bron van user

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