【问题标题】:Creating new nodes in a trie data structure in C在 C 中的 trie 数据结构中创建新节点
【发布时间】:2015-11-27 05:07:31
【问题描述】:

我正在尝试在C 中实现一个 trie 数据结构,但无法弄清楚如何动态命名添加到字典中的新节点。请参阅我的 add 方法的最后几行,我在其中尝试创建一个新节点并尝试指向它。

bool add(char *word, node tree)
{
    // Creates a variable to store the current char in the string
    char currChar = word[0];
    // Converts the current char to an index #
    int currCharIndex = ((int) toupper(currChar)) - 65;

    // Checks if we've reached the end of the word
    if (currChar == '\0')
    {
        // Sets current node word to true
        tree.word = true;
    }
    // Checks if next letter in word is not NULL
    else if (tree.children[currCharIndex] != NULL)
    {
        // Follows the pointer
        return add(&word[1], *tree.children[currCharIndex],);
    }
    else
    {
        //Creates a new node
        node; // TODO: name node
        // Points the current node to the new node
        tree.children[currCharIndex] = &// TODO: new node name
        return add(&word[1], *tree.children[currCharIndex]);
    }
}

这是我对node的定义:

typedef struct node
{
    bool word;
    struct node *children[26];
}
node;

bool search(char *word, node tree);
bool add(char *word, node tree);

int main(void)
{
    node dictionary;
}

【问题讨论】:

  • 请说明node 的定义方式,以便 SO 为您提供帮助。 node 传递给 add(按值传递)的方式看起来不对。您可能需要将指针传递给node。同样,您不能将局部变量 node <whatever-name> 添加到 add,因为它会超出范围。你需要使用malloc分配内存,然后添加。

标签: c trie


【解决方案1】:

在您拥有的add 原型中,您通过值传递tree,因此在函数返回后对add 内的tree 所做的任何更改都将丢失。您首先需要更改add 的原型以获取指针,如下所示。

bool add(char *word, node * tree)

然后你可以分配内存来添加节点如下

...
else
{
    //Creates a new node
    node * newnode;
    newnode = malloc(sizeof(node));
    //TODO Initialize newnode i.e. set all children to NULL.
    tree->children[currCharIndex] = newnode;
    return add(&word[1], tree->children[currCharIndex]);
}

还修复代码的其他部分以传递指针而不是值。

...
else if (tree->children[currCharIndex] != NULL)
{
    return add(&word[1], tree->children[currCharIndex]);
}

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 2013-05-03
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 2022-01-02
    • 2014-08-03
    • 2017-01-08
    • 1970-01-01
    相关资源
    最近更新 更多