图片.png
    什么是字典树:
    字典树,又称 Trie 树,是一种树形结构。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串)。主要思想是利用字符串的公共前缀来节约存储空间。
    在实际运用中,比如我们要储存大量的单词在一个文本中,而且还要查找某个单词是否存在,如果存在,请输出出现了多少次。考虑到有大量的单词而且还要询问出现了多少次,考虑到无法用字符串直接存储并进行遍历,所以就有了字典树这种高级数据结构。字典树的主要思想是利用字符串的公共前缀来节约存储空间。

    字典树的作用:
    单词查找、字符串排序
    图中深色的节点表示单词是存在的。如:左下角表示单词:aae

    字典树的插入与查询:(leetcode208)

    1. class Trie {
    2. //字典树节点
    3. class Node {
    4. Node[] next;
    5. boolean flag;
    6. Node() {
    7. next = new Node[26];
    8. flag = false;
    9. }
    10. }
    11. Node root;
    12. public Trie() {
    13. root = new Node();
    14. }
    15. //字符串插入
    16. public void insert(String word) {
    17. Node p = root;
    18. for(int i = 0;i < word.length();i++) {
    19. int ind = word.charAt(i) - 'a';
    20. if(p.next[ind] == null) p.next[ind] = new Node();
    21. p = p.next[ind];
    22. }
    23. p.flag = true;
    24. }
    25. //查找字符串是否存在
    26. public boolean search(String word) {
    27. Node p = root;
    28. for(int i = 0;i < word.length();i++) {
    29. int ind = word.charAt(i) - 'a';
    30. p = p.next[ind];
    31. if(p == null) return false;
    32. }
    33. return p.flag;
    34. }
    35. //查找输入的字符串是否是前缀
    36. public boolean startsWith(String prefix) {
    37. Node p = root;
    38. for(int i = 0;i < prefix.length();i++) {
    39. int ind = prefix.charAt(i) - 'a';
    40. p = p.next[ind];
    41. if(p == null) return false;
    42. }
    43. return true;
    44. }
    45. }