Endlosschleife: Prozess nicht beendet richtig

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

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

Ich bin nicht in der Lage zu verfolgen, wo ich den Fehler gemacht habe und warum es nicht aus der while-Schleife kommen.

Veröffentlicht am 04/03/2011 um 02:35
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
1

Ihr Fehler ist, dass Sie nicht eine Weile nicht verwenden sollten, sondern ein, wenn denn es ist rekursiv, aber was wollen Sie die Funktion zurückgeben? die Daten des letzten Mitglieds? wenn dem so ist es so sein sollte:

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);
}
Beantwortet am 04/03/2011 um 02:41
quelle vom benutzer

stimmen
0

Wenn Sie auf der rekursiven Version bestehen, ändern Sie die Weile, wenn.

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

Grundlagen der Rekursion:

  • Muss Basisfall haben
  • Break down Problemgröße rekursiv

Wenn Sie die iterative Art und Weise wollen:

int secondlargest(node* a)
{
    node* temp = a;
    int data = -1;
    while(temp != null){
        data = temp->data;
        temp = temp->right;
    }
    return data;
}
Beantwortet am 04/03/2011 um 02:42
quelle vom benutzer

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