首页 > 解决方案 > 为什么我的 trie 根指针已被删除并分配为 NULL 时显示一些值?

问题描述

有两种情况:

  1. 当我试图删除整个 trie 时,它​​完全删除为 root = 0x0 或 NULL
  2. 但是当我尝试一个接一个地删除条目并且在检查root是否为NULL时删除最终条目后,它给了我root = not NULL

现在这是我的整个 trie 删除代码 -

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)

从调试窗口 - 根节点截图

现在我删除特定的节点代码 -

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

从调试窗口 - 尝试根信息

在第一张图片中,根节点被完全删除。但是在第二张图片中,它看起来像是被删除了,但并不完全。这是为什么?

整个代码

提前致谢。

标签: c++pointerstrie

解决方案


推荐阅读