trie树的特点:
拿内存换取时间,查询效率高
一、结点结构
public class TreeNode {
char data;//节点数据
boolean isEnd;//是否是结束
LinkedList<TreeNode>childList;//子节点
int count;//计数;
public TreeNode(char c){
this.data=c;
isEnd=false;
childList=new LinkedList<TreeNode>();
count=0;
}
//子节点字符
public TreeNode subNode(char c){
if(childList!=null){
for(TreeNode t:childList){
if(t.data==c)return t;
}
}
return null;
}
}
二、树的生成
public class TrieTree {
//根节点根节点为空值
private TreeNode root;
//实例化的时候root的数据位空值
public TrieTree(){
root=new TreeNode(' ');
}
public void insertNode(String word){
if(searchNode(word))return;
TreeNode current = root;
for(int i = 0; i < word.length(); i++){
TreeNode child = current.subNode(word.charAt(i));
if(child != null){
current = child;
} else {
current.childList.add(new TreeNode(word.charAt(i)));
current = current.subNode(word.charAt(i));
}
current.count++;
}
// Set isEnd to indicate end of the word
current.isEnd = true;
}
//搜索
//由于他的第一个字符是否存在于root的子节点中然后顺藤
public boolean searchNode(String word){
TreeNode tn=root;
for(int i=0;i<word.length();i++){
if(tn.subNode(word.charAt(i))==null){
return false;
}else{
tn=tn.subNode(word.charAt(i));
}
}
return tn.isEnd;
}
}