Uendelig løkke: Prosess og ikke avslutter ordentlig

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

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

Jeg er ikke i stand til å spore hvor jeg har gjort feil, og hvorfor det ikke kommer ut av mens loop.

Publisert på 04/03/2011 klokken 01:35
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Din feil er at du ikke bør bruke en stund, men i stedet en if fordi det er rekursiv, men hva gjør du vil at funksjonen skal returnere? data fra den siste medlem? hvis så det burde være slik:

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);
}
Svarte 04/03/2011 kl. 01:41
kilden bruker

stemmer
0

Hvis du insisterer på rekursive versjonen, endre stund å om.

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

Grunnleggende om rekursjon:

  • Må ha base case
  • Bryt ned problem størrelse rekursivt

Hvis du vil at iterativ måte:

int secondlargest(node* a)
{
    node* temp = a;
    int data = -1;
    while(temp != null){
        data = temp->data;
        temp = temp->right;
    }
    return data;
}
Svarte 04/03/2011 kl. 01:42
kilden bruker

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