Бесконечный цикл: процесс не завершается должным образом - PullRequest
0 голосов
/ 04 марта 2011
struct node
{
    int data;
    node* left;
    node* right;
};

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

Я не могу отследить, где я совершил ошибку и почему она не выходит из цикла while.

Ответы [ 2 ]

1 голос
/ 04 марта 2011

Ваша ошибка в том, что вы не должны использовать while, а вместо if, потому что это рекурсивно, но что вы хотите, чтобы функция возвращала? данные последнего члена? если так, то так и должно быть:

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);
}
0 голосов
/ 04 марта 2011

Если вы настаиваете на рекурсивной версии, измените время на if.

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