我正在学习Trie,并对维基百科中的描述感到有些困惑: http://en.wikipedia.org/wiki/Trie
在示例图片中,字符存储在节点和边缘中?节点类最常见的实现是什么?人们通常将角色存储在节点对象中吗?或者他们通常将它与边缘一起存储?
谢谢!
答案 0 :(得分:2)
字符至少需要存储在边缘上(好吧,作为技术性,我不确定我是否将其归类为存储在边缘,而是存储在父节点上)。
这背后的原因 - 如果您不知道孩子代表什么字符,您将如何在树中有效地找到字符串?在每个级别,您都必须仔细检查所有孩子:
for each child c
if c.char == character we're looking for
而不仅仅是:(假设children
是Map
Character
到Node
}
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)
我认为当你有一个二维数组或一个矩阵时,边缘更有意义。构建树并在边缘存储值可能很复杂。