
什么是字典树:
字典树,又称 Trie 树,是一种树形结构。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串)。主要思想是利用字符串的公共前缀来节约存储空间。
在实际运用中,比如我们要储存大量的单词在一个文本中,而且还要查找某个单词是否存在,如果存在,请输出出现了多少次。考虑到有大量的单词而且还要询问出现了多少次,考虑到无法用字符串直接存储并进行遍历,所以就有了字典树这种高级数据结构。字典树的主要思想是利用字符串的公共前缀来节约存储空间。
字典树的作用:
单词查找、字符串排序
图中深色的节点表示单词是存在的。如:左下角表示单词:aae
字典树的插入与查询:(leetcode208)
class Trie {//字典树节点class Node {Node[] next;boolean flag;Node() {next = new Node[26];flag = false;}}Node root;public Trie() {root = new Node();}//字符串插入public void insert(String word) {Node p = root;for(int i = 0;i < word.length();i++) {int ind = word.charAt(i) - 'a';if(p.next[ind] == null) p.next[ind] = new Node();p = p.next[ind];}p.flag = true;}//查找字符串是否存在public boolean search(String word) {Node p = root;for(int i = 0;i < word.length();i++) {int ind = word.charAt(i) - 'a';p = p.next[ind];if(p == null) return false;}return p.flag;}//查找输入的字符串是否是前缀public boolean startsWith(String prefix) {Node p = root;for(int i = 0;i < prefix.length();i++) {int ind = prefix.charAt(i) - 'a';p = p.next[ind];if(p == null) return false;}return true;}}
