Trie Node是否存储字符值?

时间:2013-08-02 01:27:23

标签: algorithm data-structures trie

我正在学习Trie,并对维基百科中的描述感到有些困惑: http://en.wikipedia.org/wiki/Trie

在示例图片中,字符存储在节点和边缘中?节点类最常见的实现是什么?人们通常将角色存储在节点对象中吗?或者他们通常将它与边缘一起存储?

谢谢!

2 个答案:

答案 0 :(得分:2)

字符至少需要存储在边缘上(好吧,作为技术性,我不确定我是否将其归类为存储在边缘,而是存储在父节点上)。

这背后的原因 - 如果您不知道孩子代表什么字符,您将如何在树中有效地找到字符串?在每个级别,您都必须仔细检查所有孩子:

for each child c
  if c.char == character we're looking for

而不仅仅是:(假设childrenMap CharacterNode}

children.get(character we're looking for)

你当然可以更紧凑地“存储”角色 - 如果你只有小写字符,你可以只有一个数组 - Node children[26],你可以在那里查找:

children[character we're looking for - 'a']

意味着children[0]将是'a'的孩子,children[1]的孩子'b'等等。

答案 1 :(得分:0)

我认为当你有一个二维数组或一个矩阵时,边缘更有意义。构建树并在边缘存储值可能很复杂。