Boucle infinie: Processus ne se terminant pas correctement

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

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

Je ne suis pas en mesure de retracer où je fait l'erreur et pourquoi son ne sort pas de la boucle while.

Créé 04/03/2011 à 02:35
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Votre erreur est que vous ne devriez pas utiliser un certain temps, mais plutôt une si parce qu'il est récursive, mais que voulez-vous la fonction de retour? les données du dernier membre? le cas échéant, il devrait ressembler à ceci:

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);
}
Créé 04/03/2011 à 02:41
source utilisateur

voix
0

Si vous insistez sur la version récursive, changer le temps pour 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);
    }
}

Principes de base de récursion:

  • Doit avoir le cas de base
  • Décomposer la taille du problème récursif

Si vous voulez que la manière itérative:

int secondlargest(node* a)
{
    node* temp = a;
    int data = -1;
    while(temp != null){
        data = temp->data;
        temp = temp->right;
    }
    return data;
}
Créé 04/03/2011 à 02:42
source utilisateur

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