@markheng
2018-03-17T21:00:06.000000Z
字数 1316
阅读 1773
算法
Trie的重要特点是某一节点的后代都含有相同的前缀,因此叫做前缀树。
思路很直接,遍历字符串的字母的同时,也从树根沿路径前进,没有节点表示当前为止的字符串时,就插入新的结点,伪码如下:
Initialize: cur = root
for each char c in target string S:
if cur does not have a child c:
cur.children[c] = new Trie node
cur = cur.children[c]
cur is the node which represents the string S
一定要注意根节点的初始化
搜索前缀
也很直接的思路,按照目标字符串的每个字符在树中搜索,搜索不能进行下去则表示搜索失败,否则认为搜索成功,一直进行此过程直到搜索到根节点。
Initialize: cur = root
for each char c in target string S:
if cur does not have a child c:
search fails
cur = cur.children[c]
search success
搜索单词
与搜索前缀的方法相同,只是在搜索到最终目标结点之后需要判断是否到达了树的最下层子节点。
Map Sum Pairs
https://leetcode.com/explore/learn/card/trie/148/practical-application-i/1058/
Replace Words
https://leetcode.com/explore/learn/card/trie/148/practical-application-i/1053/
Add and Search Word - Data structure design
https://leetcode.com/explore/learn/card/trie/148/practical-application-i/1052/
Maximum XOR of Two Numbers in an Array
https://leetcode.com/explore/learn/card/trie/149/practical-application-ii/1057/
前缀树解法是一种快速遍历的方法,dicuss里有更快的方法。
Word Search II
https://leetcode.com/explore/learn/card/trie/149/practical-application-ii/1056/
Backtracking and trie
中点在于剪枝
Palindrome Pairs
https://leetcode.com/explore/learn/card/trie/149/practical-application-ii/1138/