import java.util.LinkedList;
import java.util.List;
class TrieNode {
List<TrieNode> children = new LinkedList<>();
boolean isEnd;
char item = ' ';
public TrieNode() {
}
public TrieNode(char item) {
this.item = item;
}
public void addChild(char ch) {
TrieNode insertNode = new TrieNode(ch);
children.add(insertNode);
}
public TrieNode getChild(char ch) {
for (TrieNode node : children) {
if (node.item == ch) {
return node;
}
}
return null;
}
}
public class Trie {
private TrieNode root;
public Trie() {
root = new TrieNode();
}
public void insert(String word) {
if (search(word)) {
return;
}
TrieNode curr = root;
for (int i = 0; i < word.length(); i++) {
if (curr.getChild(word.charAt(i)) == null) {
curr.addChild(word.charAt(i));
}
curr = curr.getChild(word.charAt(i));
}
curr.isEnd = true;
}
public boolean search(String word) {
TrieNode curr = root;
for (int i = 0; i < word.length(); i++) {
if (curr.getChild(word.charAt(i)) == null) {
return false;
}
curr = curr.getChild(word.charAt(i));
}
return curr.isEnd;
}
public boolean startsWith(String prefix) {
TrieNode curr = root;
for (int i = 0; i < prefix.length(); i++) {
if (curr.getChild(prefix.charAt(i)) == null) {
return false;
}
curr = curr.getChild(prefix.charAt(i));
}
return true;
}
public static void main(String[] args) {
Trie trie = new Trie();
trie.insert("hello");
trie.insert("world");
System.out.println(trie.search("hello"));
System.out.println(trie.startsWith("he"));
}
}
简单的Trie前缀树实现
最新推荐文章于 2020-07-24 17:51:49 发布