字典树--java 定义
来源:互联网 发布:网页版的淘宝无法登陆 编辑:程序博客网 时间:2024/05/19 18:41
public class Trie{ private int SIZE=26; private TrieNode root;//字典树的根 Trie() //初始化字典树 { root=new TrieNode(); } private class TrieNode //字典树节点 { private int num;//有多少单词通过这个节点,即由根至该节点组成的字符串模式出现的次数 private TrieNode[] son;//所有的儿子节点 private boolean isEnd;//是不是最后一个节点 private char val;//节点的值 TrieNode() { num=1; son=new TrieNode[SIZE]; isEnd=false; } } //建立字典树 public void insert(String str) //在字典树中插入一个单词 { if(str==null||str.length()==0) { return; } TrieNode node=root; char[]letters=str.toCharArray(); for(int i=0,len=str.length(); i<len; i++) { int pos=letters[i]-'a'; if(node.son[pos]==null) { node.son[pos]=newTrieNode(); node.son[pos].val=letters[i]; } else { node.son[pos].num++; } node=node.son[pos]; } node.isEnd=true; } //计算单词前缀的数量 public int countPrefix(Stringprefix) { if(prefix==null||prefix.length()==0) { return-1; } TrieNode node=root; char[]letters=prefix.toCharArray(); for(inti=0,len=prefix.length(); i<len; i++) { int pos=letters[i]-'a'; if(node.son[pos]==null) { return 0; } else { node=node.son[pos]; } } return node.num; }//打印指定前缀的单词 public String hasPrefix(String prefix) { if (prefix == null || prefix.length() == 0) { return null; } TrieNode node = root; char[] letters = prefix.toCharArray(); for (int i = 0, len = prefix.length(); i < len; i++) { int pos = letters[i] - 'a'; if (node.son[pos] == null) { return null; } else { node = node.son[pos]; } } preTraverse(node, prefix); return null; }// 遍历经过此节点的单词. public void preTraverse(TrieNode node, String prefix) { if (!node.isEnd) {for (TrieNode child : node.son) { if (child!=null) { preTraverse(child, prefix+child.val); } } return; } System.out.println(prefix); } //在字典树中查找一个完全匹配的单词. public boolean has(Stringstr) { if(str==null||str.length()==0) { return false; } TrieNode node=root; char[]letters=str.toCharArray(); for(inti=0,len=str.length(); i<len; i++) { intpos=letters[i]-'a'; if(node.son[pos]!=null) { node=node.son[pos]; } else { return false; } } return node.isEnd; } //前序遍历字典树. public void preTraverse(TrieNodenode) { if(node!=null) { System.out.print(node.val+"-");for(TrieNodechild:node.son) { preTraverse(child); } } } public TrieNode getRoot() { return this.root; } public static void main(String[]args) { Trietree=newTrie(); String[]strs= {"banana","band","bee","absolute","acm",}; String[]prefix= {"ba","b","band","abc",};for(Stringstr:strs) { tree.insert(str); } System.out.println(tree.has("abc")); tree.preTraverse(tree.getRoot()); System.out.println();//tree.printAllWords();for(Stringpre:prefix) { int num=tree.countPrefix(pre); System.out.println(pre+""+num); } }}
阅读全文
0 0
- 字典树--java 定义
- 字典树的定义
- 定义字典
- 字典数据类型-字典的定义
- java 版字典树
- java 版字典树
- Java实现字典树
- 字典树(java)
- 字典树java版本
- 字典树Java模板
- 数据字典之定义
- java版 字典树
- java字典树 实现统计
- 字典树模板(java)
- Java实现字典树TrieTree
- 字典树与三向字典树-java实现
- python 嵌套字典的定义
- trie树(字典树)java实现
- java定时scheduleAtFixedRate
- 常用的远程工具推荐
- A Math Problem ——2017ACM/ICPC广西邀请赛
- Scala隐式转换和隐式参数
- Oracle---PL/SQL
- 字典树--java 定义
- python问题集
- mysql
- CentOS7.x 配置静态ip
- linux系统基本命令之管理输入输出,vim详解
- Oracle ---体系结构
- cocospods出现“Generating Pods project Abort trap: 6”
- Vision_字符串_最小(大)表示法
- 深度学习