Java Trie树

时间:2023-03-10 01:25:23
Java Trie树

Tire树,又叫字典树,主要是用来查找单词,词频统计的.

老规矩,直接上代码.

package tireTree;

public class TireTree {
TireNode root; public TireTree(TireNode root) {
this.root = root;
} private void insertElement(TireNode root, String word) {
if (word == null || word.isEmpty())
return;
char[] elements = word.toCharArray();
int index = elements[0] - 'a';
if (root.getNode()[index] == null) {
root.getNode()[index] = new TireNode();
root.getNode()[index].setElement(elements[0]);
}
if (word.length() == 0)
return;
insertElement(root.getNode()[index], word.substring(1));
} private boolean searchWord(TireNode root, String word) {
if (word == null || word.isEmpty())
return false;
TireNode p = root;
int index = 0;
while (p != null && index < word.length()) {
int k = word.charAt(index) - 'a';
if (root.getNode()[k] != null) {
if (index == word.length() - 1) {
root.getNode()[k].setFreq(root.getNode()[k].getFreq() + 1);
return true;
} else {
root = root.getNode()[k];
index++;
}
} else {
return false;
}
}
return false;
} public static void main(String[] args) {
TireNode root = new TireNode();
TireTree tree = new TireTree(root);
String context = "My Name is Tom,What is your name?My name is Jenny.";
String target = "tom";
for (String word : TireTree.transContext(context)) {
tree.insertElement(root, word);
}
System.out.println(tree.searchWord(root, target));
} public static String[] transContext(String context) {
String c = context.toLowerCase();
c = c.replaceAll("[,?!.]", " ");
c = c.substring(0, context.length() - 1);
return c.split(" ");
}
} class TireNode {
private TireNode[] node;
private int freq;
private char element; public void setElement(char element) {
this.element = element;
} public TireNode() {
node = new TireNode[26];
freq = 0;
} public TireNode[] getNode() {
return node;
} public int getFreq() {
return freq;
} public char getElement() {
return element;
} public void setNode(TireNode[] node) {
this.node = node;
} public void setFreq(int freq) {
this.freq = freq;
} }