Trie树中的Trie节点的析构函数
我正在创建Trie的实现,TrieNode结构是个别节点和TrieSet类,它是完整的树。这里是我的TrieNode的签名:Trie树中的Trie节点的析构函数
struct TrieNode { TrieNode(bool in, TrieNode *p);
~TrieNode();
void deleteChildren(TrieNode *node);
bool isLeafNode();
bool inSet;
TrieNode *parent;
TrieNode *children[30];
};
我试图确定哪些第一递归删除所有的孩子,最后删除该节点的析构函数,但我得到一个分段错误。这里是我的构造函数,析构函数和它的帮助函数的代码:
TrieNode::TrieNode(bool in, TrieNode *p) {
inSet = in;
parent = p;
}
TrieNode::~TrieNode()
{
for(int i = 0; i < 30; i++)
{
if(children[i] != nullptr)
{
delete children[i];
}
}
}
任何帮助,将不胜感激,谢谢!
回答:
children
数组未被初始化,所以数据将是随机垃圾并试图删除它们未定义的行为,并可能崩溃。
在deleteChildren
中调用delete node
是错误的,因为它导致递归析构函数调用(就像在析构函数中调用delete this
一样)。
可能还有其他问题。我没有广泛地看。
以上是 Trie树中的Trie节点的析构函数 的全部内容, 来源链接: utcz.com/qa/259098.html