Как обновить значение статической переменной после выполнения одного теста? - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу преобразовать дерево бинарного поиска в двусвязный список. Я сделал код для преобразования BST в DLL. Мой код выдает правильный вывод для первого тестового случая, но в дальнейшем он не выдает никаких выходных данных. Проблема заключается в использовании статической переменной.Я должен сделать, если выдает правильный вывод для всех тестовых случаев?

void BToDLL(Node *root, Node **head_ref)
{
    static Node* prev=NULL;
    if(root==NULL)
    return;
    BToDLL(root->left,head_ref);
    if(prev==NULL)
    {
        *head_ref=root;
    }
    else
    {
        root->left=prev;
        prev->right=root;
    }
    prev=root;
    BToDLL(root->right,head_ref);
}

1 Ответ

0 голосов
/ 02 апреля 2019

Вместо локальной переменной static вы можете изменить свою функцию, приняв третий параметр со значением по умолчанию NULL.

void BToDLL(Node *root, Node **head_ref, Node* prev=NULL)

При первом вызове BToDLL берется значение по умолчанию, но в последнем рекурсивном вызове BToDLL вы также можете указать аргумент prev.

BToDLL(root->right,head_ref, prev);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...