208. 实现 Trie (前缀树)

思路比较简单 只是这种类用的不太习惯。。

插入就是看儿子的这个位置有没有,有就可以给计数加一下,没有就新建节点 插到最后一个字符就设置isend

查找就是一直往下走,如果走不动了就false,否则判断走到最后的isend

判断前缀更简单了,,一直判断就行,都不用判断最后的isend

 1 class Trie {
 2 private:
 3     bool isEnd;      //这么写 感觉一个像一个树又像一个节点。。不太习惯啊
 4     Trie* next[26];
 5 public:
 6     Trie() {
 7         isEnd = false;
 8         memset(next, 0, sizeof(next));
 9     }
10     
11     void insert(string word) {
12         Trie* node = this;
13         for (char c : word) {
14             if (node->next[c-'a'] == NULL) {
15                 node->next[c-'a'] = new Trie();
16             }
17             node = node->next[c-'a'];
18         }
19         node->isEnd = true;
20     }
21     
22     bool search(string word) {
23         Trie* node = this;
24         for (char c : word) {
25             node = node->next[c - 'a'];
26             if (node == NULL) {
27                 return false;
28             }
29         }
30         return node->isEnd;
31     }
32     
33     bool startsWith(string prefix) {
34         Trie* node = this;
35         for (char c : prefix) {
36             node = node->next[c-'a'];
37             if (node == NULL) {
38                 return false;
39             }
40         }
41         return true;
42     }
43 };
每天进步一点点~
原文地址:https://www.cnblogs.com/libin123/p/14628088.html