字典树是一种前缀树
package Trie; import java.util.TreeMap; public class Trie { private class Node{ public boolean isWord; public TreeMap<Character, Node> next; public Node(boolean isWord) { this.isWord = isWord; next = new TreeMap<>(); } public Node() { this(false); } } private Node root; private int size; public Trie() { root = new Node(); size = 0; } //获取Trie中存储的单词数量 public int getSize() { return size; } public void add(String word) { Node cur = root; for(int i = 0 ; i < word.length() ; i ++) { char c = word.charAt(i); if(cur.next.get(c) == null) { cur.next.put(c, new Node()); } cur = cur.next.get(c); } if(!cur.isWord) { cur.isWord = true; size ++; } } //查询单词word四会否在Trie中 public boolean contains(String word) { Node cur = root; for(int i = 0 ; i < word.length() ; i ++) { char c = word.charAt(i); if(cur.next.get(c) == null) return false; cur = cur.next.get(c); } return cur.isWord; } //前缀搜索 public boolean isPrefix(String prefix) { Node cur = root; for(int i = 0 ; i < prefix.length() ; i ++) { char c = prefix.charAt(i); if(cur.next.get(c) == null) { return false; } cur = cur.next.get(c); } return true; } }
节省空间:
压缩字典树,但是维护成本更高
三分搜索树