C++ 后缀树构造

C++ 后缀树构造,c++,suffix-tree,C++,Suffix Tree,我将为给定的字符串实现后缀树,我认为应该是这样的 struct suffix { char letter; suffix * left,*right; }; suffix *insert(suffix *node,char *s){ } //在这里,我将用所有子串和字符来构造树 但是我不知道如何使用左右部分,这棵树是按照严格的字符顺序排序的吗?或者?请帮助我,我不想在网上使用一些代码,我需要自己实现它,所以请给我一些提示,一些小代码看看: 请注意,首先,后缀树不是二叉树,因此您的实

我将为给定的字符串实现后缀树,我认为应该是这样的

struct suffix
{

char  letter;
suffix * left,*right; 

};
suffix *insert(suffix *node,char *s){

}
//在这里,我将用所有子串和字符来构造树 但是我不知道如何使用左右部分,这棵树是按照严格的字符顺序排序的吗?或者?请帮助我,我不想在网上使用一些代码,我需要自己实现它,所以请给我一些提示,一些小代码看看:

请注意,首先,后缀树不是二叉树,因此您的实现大纲存在根本缺陷

其次,每个节点/分支只存储一个字符是不够的;后缀树分支表示可以长于单个字符的子字符串。通常只在字符串中存储子字符串的开始和结束索引,而不是字符串本身;否则后缀树将消耗大量不必要的内存


最后,这里。他们什么也不买,只会给你带来麻烦。使用类似于
boost::container::vector
(我建议使用
std::vector
,但不幸的是)。

维基百科是一个开始

然而,实际上这样做是为了理解后缀树构造算法,Weiner或Ukkonen算法

Ukkonen算法更简单:

此外,该链接不太学术,更实用:

试着开始理解算法

幸运的是,这是最困难的数据结构之一。唯一最糟糕的是后缀树的压缩和优化版本


但是所有伟大的程序员都喜欢大挑战。

这意味着我应该在插入方法中使用循环?一个循环用于整个字符串,另一个循环用于查找所有后续子字符串并将其添加到节点?@dato好吧,你肯定不会绕过循环。很抱歉稍后回复,因为我不在家,当我创建vectori无法访问结构的内容时,为什么?例如,在我声明的struct后缀字符串s中,我如何访问此字符串?您的注释中的信息太少,无法回答此问题。用具体问题打开一个新问题。