您的位置:首页 > 理论基础 > 数据结构算法

java 数据结构源码--Trie树

2014-11-18 17:12 267 查看
node 

package trieTree;

public class TrieTreeNode {
final int MAX_SIZE=26;
int nCount;//记录该字符出现次数
char ch; //记录该字符
TrieTreeNode[] child;

public TrieTreeNode() {
nCount=1;
child=new TrieTreeNode[MAX_SIZE];
}

}

tree
package trieTree;
import trieTree.TrieTreeNode;

public class TrieTree {

//字典树的插入和构建
public void createTrie(TrieTreeNode node,String str){
if (str==null||str.length()==0) {
return;
}
char[] letters=str.toCharArray();
for (int i = 0; i < letters.length; i++) {
int pos = letters[i] - 'a';
if (node.child[pos] == null) {
node.child[pos] = new TrieTreeNode();
}else {
node.child[pos].nCount++;
}
node.ch=letters[i];
node = node.child[pos];
}
}
//字典树的查找
public int findCount(TrieTreeNode node,String str){
if (str==null||str.length()==0) {
return -1;
}
char[] letters=str.toCharArray();
for (int i = 0; i < letters.length; i++) {
int pos = letters[i] - 'a';
if (node.child[pos] == null) {
return 0;
}else {
node=node.child[pos];
}
}
return node.nCount;
}

}

测试源码 test

package trieTree;
import trieTree.TrieTree;
import trieTree.TrieTreeNode;

public class test {

public static void main(String[] args)
{

String[] strs={
"banana",
"band",
"bee",
"absolute",
"acm",
};
String[] prefix={
"ba",
"b",
"band",
"abc",
};

TrieTree tree = new TrieTree();
TrieTreeNode root=new TrieTreeNode();

for (String s : strs) {
tree.createTrie(root, s);
}
// tree.printAllWords();
for(String pre:prefix){
int num=tree.findCount(root,pre);
System.out.println(pre+" "+num);
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: