Home > front end >  How do I initialize all elements of TrieNodes' children to null
How do I initialize all elements of TrieNodes' children to null

Time:10-28

I am trying to solve a Trie problem, for which I create a TrieNode class as below:

class TrieNode {
    public:
    bool isWord;
    TrieNode* children[26];
    TrieNode() {
        isWord=false;
        memset(children, NULL, sizeof(children));    //results in warning
    };
};

This results in a warning:

warning: passing NULL to non-pointer argument 2 of 'void* memset(void*, int, size_t)' [-Wconversion-null]

Replacing it with nullptr results in a compile time error:

error: cannot convert 'std::nullptr_t' to 'int' for argument '2' to 'void* memset(void*, int, size_t)'

So my question is, how do I initialize all the values in children to NULL/nullptr? I tried a few options such as children[26]={ nullptr };, but those all resulted in runtime errors (worked fine only with memset(children, NULL, sizeof(children));).

Eventually, while building the trie, I wish to have the following logic:

if(!curr->children[index]) {
    curr->children[index]=new TrieNode();
}
curr=curr->children[index];

CodePudding user response:

You might do:

class TrieNode
{
public:
    bool isWord = false;
    TrieNode* children[26]{};

    TrieNode() = default;
};

CodePudding user response:

The easiest C option is std::fill(std::begin(array), std::end(array), nullptr).

  • Related