10.2 Trie字典树基础
Tip:本博客内容是通过学习慕课网bobo老师视频做的笔记总结,不用于任何商业用途,只用于帮助更多技术爱好者。
(1) Trie字典树的Java语言实现案例
package com.wwl.trie;
import java.util.TreeMap;
public class Trie {
private class Node {
private boolean isWord;
private TreeMap<Character, Node> next;
public Node(boolean isWord) {
this.isWord = isWord;
next = new TreeMap<>();
}
public Node() {
this(false);
}
}
// Trie树根节点定义
private Node root;
// Trie树存储单词数
private int size;
public Trie() {
root = new Node();
this.size = 0;
}
// 获取Trie树存储的单词数
public int getSize() {
return size;
}
// 向Trie树种添加一个新的词汇
public void add(String word) {
// 字符串判空操作
if (word == null) {
return;
}
// 定义当前节点
Node cur = root;
// 对新加入Trie树的词汇进行识别
// 第一:如果新加入的字符不存在,则在当前node节点创建一个新的节点树;
// 第二:如果新加入的字符存在,则找到存在的字符节点,然后赋值给当前节点,继续下一步识别。
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);
}
// 第一:如果当前加入的单词不存在,则把isWord标志改成true,表示加入的单词最后一个字符表示单词结尾;
// 第二:如果当前假如的字符存在,则不进行逻辑处理。
if (!cur.isWord) {
cur.isWord = true;
size++;
}
}
}
(2) Trie字典树的Java测试代码
package com.wwl.trie;
public class TrieTest {
public static void main(String[] args) {
Trie trie = new Trie();
trie.add("hello");
trie.add("word");
trie.add("hello");
System.out.println("存储的单词数量为:" + trie.getSize());
trie.add("dog");
trie.add("cat");
trie.add("beer");
System.out.println("存储的单词数量为:" + trie.getSize());
trie.add("word");
trie.add("cat");
trie.add("honey");
System.out.println("存储的单词数量为:" + trie.getSize());
}
}
如果感兴趣的童鞋,可以观看我下一篇博客:10.3 Trie字典树查询