अनंत लूप: प्रक्रिया ठीक से समाप्त नहीं

वोट
0
struct node
{
    int data;
    node* left;
    node* right;
};

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

मैं जहाँ मैं गलती किया है और यही कारण है कि इसकी जबकि लूप से बाहर नहीं आ पता लगाने में सक्षम नहीं हूँ।

04/03/2011 को 02:35
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
1

आपका गलती है कि आप एक है, जबकि उपयोग नहीं करना चाहिए, लेकिन इसके बजाय एक यदि क्योंकि यह पुनरावर्ती है, लेकिन क्या आप समारोह वापस करना चाहते हैं? अंतिम सदस्य का डेटा? यदि ऐसा है तो यह इस तरह होना चाहिए:

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);
}
04/03/2011 को 02:41
का स्रोत उपयोगकर्ता

वोट
0

आप पुनरावर्ती संस्करण पर जोर देते हैं, अगर है, जबकि बदल जाते हैं।

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

प्रत्यावर्तन की मूल बातें:

  • आधार केस होना चाहिए
  • रिकर्सिवली समस्या आकार पर विभाजित करें

आप पुनरावृत्ति रास्ता चाहते हैं:

int secondlargest(node* a)
{
    node* temp = a;
    int data = -1;
    while(temp != null){
        data = temp->data;
        temp = temp->right;
    }
    return data;
}
04/03/2011 को 02:42
का स्रोत उपयोगकर्ता

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