Бесконечный цикл: Процесс не завершение должного

голоса
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