Почему мой указатель tr ie root показывает какое-то значение, хотя он уже удален и ему присвоено значение NULL? - PullRequest
0 голосов
/ 09 марта 2020

Есть два сценария ios:

  1. , когда я пытался удалить весь tr ie, он удалялся как root = 0x0 или NULL
  2. , но когда я попытался удалить записи одну за другой и после удаления последней записи при проверке, был ли root НЕДЕЙСТВИТЕЛЕН или нет, он дал мне root = не НЕДЕЙСТВИТЕЛЕН

Теперь это моя вся tr ie код удаления -

void del(Node *&cur) {
    if (!cur) {
        return;
    }
    for (int i = 0; i < size; i++)
        if (cur->next[i])
            del(curr, cur->next[i]);
    delete cur;
    cur = NULL;
}

Использование - del(root)

Из окна отладки - Root Node Screenshot

Теперь мой указатель удаления c узел код -

void remove(Node *&curr) {
    if (curr->parent) {
        Node *temp = curr->parent;
        if (curr->wordCount > 1) {
            curr->wordCount--;
        }
        else {
            temp->next[curr->id] = NULL;
            delete curr;
            curr = NULL;
        }
        remove(temp);
    }
    else {
        curr->wordCount--;
        if (curr->wordCount == 0) {
            delete curr;
            curr = NULL;
        }
    }
}

void findRemoveItem(char *str) {
    Lookup var = search(str);
    if (var.isAvailable) {
        var.lookedupNode->isLeaf = false;
        remove(var.lookedupNode);
    }
    else {
        printf("Not a word\n");
    }
}

Использование - findRemoveItem(arr[7]) //arr -> string array

из окна отладки - trie root info

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

Весь код

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...