版权声明:版权声明:本文为博主原创文章,转载时请注明出处——作者:冰怜 https://blog.csdn.net/xiaoxin0630/article/details/87817383
Trie
isWord 标记单词是否结束末尾
Trie的创建
TreeMap是树结构的Map、Character包装类的char
需要初始化Trie,用构造方法来初始化
this.isWord=isWord;//把传过来的isWord给了构造参数isWord
next=new TreeMap<>();//创建新的节点 并指向了新创建的
扫描二维码关注公众号,回复:
5372804 查看本文章
private class Node{
public boolean isWord;//标记 是否单词结束
public TreeMap<Character, Node> next;//TreeMap 树结构的map character是char包装类
/**
* 节点初始化(构造方法创建)
* @param isWord 标记单词是否结束
*/
public Node(boolean isWord){
this.isWord=isWord;
next =new TreeMap<>();//next指向新的节点
}
public Node(){
this(false);//isWork 默认赋值false
}
}
添加单词
添加新的单词 把它拆分一个个的字符然后传进去
判断第一个字符是否存在 没有就创建一个节点
有的话就不断往下更新
最后判断单词是否结束,size+1 统计单词数
//向Trice中添加一个新的单词word
public void add(String word){
Node cur=root;
for(int i=0;i<word.length();i++){
char c=word.charAt(i);//word.charAt 吧string 拆成一个个的字符
//是否已经有指向c的内容 没有c 就创建新的节点
if(cur.next.get(c) == null)
cur.next.put(c, new Node());
cur=cur.next.get(c);
}
//isword 判断是否falas 判断以前是否存在
if(!cur.isWord){
cur.isWord=true;
size++;
}
}
整体的代码
package com.binglian.Trie;
import java.util.TreeMap;
/**
* Trie(多叉树) 字典树也可以说前缀树
*
* 我的理解,它是一个单词一个节点,不是一个字符一个节点
* @author binglian
*
*/
public class Trie {
/**
* 一个私有的节点 字典树的创建
* @author binglian
*
*/
private class Node{
public boolean isWord;//标记 是否单词结束
public TreeMap<Character, Node> next;//TreeMap 树结构的map character是char包装类
/**
* 节点初始化(构造方法创建)
* @param isWord 标记单词是否结束
*/
public Node(boolean isWord){
this.isWord=isWord;
next =new TreeMap<>();//next指向新的节点
}
public Node(){
this(false);//isWork 默认赋值false
}
}
private Node root;//根节点
private int size;
/**
* 字段数初始化
*/
public Trie(){
root=new Node();
size=0;
}
/**
* 获得Tire中存储的单词数量
* @return
*/
public int getSize(){
return size;
}
//向Trice中添加一个新的单词word
public void add(String word){
Node cur=root;
for(int i=0;i<word.length();i++){
char c=word.charAt(i);//word.charAt 吧string 拆成一个个的字符
//是否已经有指向c的内容 没有c 就创建新的节点
if(cur.next.get(c) == null)
cur.next.put(c, new Node());
cur=cur.next.get(c);
}
//isword 判断是否falas 判断以前是否存在
if(!cur.isWord){
cur.isWord=true;
size++;
}
}
}