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);
}
}
}
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);
}
}
}
相关文章推荐
- java 数据结构. 源码阅读
- java 数据结构源码--线段树
- 【Java】Java集合框架源码和数据结构简要分析——List
- java 基础数据结构源码详解及数据结构算法
- Java源码集合类TreeMap学习1——数据结构5红黑树
- Java数据结构: java.util.BitSet源码学习
- Java数据结构源码分析-Vector
- Java数据结构源码分析-LinkedList
- (7) java源码分析------之ArrayList (对应数据结构中线性表中的顺序表,JDK1.6)
- Java数据结构——LinkedList源码简介
- 【Java】Java集合框架源码和数据结构简要分析——Set和Map
- 9-11-Trie树/字典树/前缀树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
- Java数据结构源码分析-HashSet
- java实现的Trie树数据结构
- 【Java】Java集合框架源码和数据结构简要分析——List
- 剖析Java中HashMap数据结构的源码及其性能优化
- Java源码集合类TreeMap学习1——数据结构3二叉树创建代码
- Java数据结构源码分析-ArrayList
- Java源码集合类TreeMap学习1——数据结构2
- JAVA并发API源码解析:并发数据结构、线程、线程池及其应用