在C中的trie数据结构中创建新节点

时间:2015-11-27 05:07:32

标签: c trie

我正在尝试在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;
}

1 个答案:

答案 0 :(得分:0)

在您拥有的add原型中,您按值传递tree,因此在tree内对add所做的任何更改都会在函数返回后丢失。您首先需要更改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]);
}