博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字典树(前缀树)
阅读量:3961 次
发布时间:2019-05-24

本文共 1984 字,大约阅读时间需要 6 分钟。

字典树(前缀树)

数据节点:class Node{
Node nodes[]; boolean isEnd; String str; public Node() {
//该成员用于判断当前节点是否在字典树的末尾 this.isEnd = false; //该成员用于存储其指向的下一个节点,我们假设只考虑26个小写字母,索引值与字母对应关系如下 //0-'a' '1'-'b' ... 25-'z' this.nodes = new Node[26]; //保存当前节点的对应字符串 this.str = null; } //添加字符串 public void add(Node root,String target)//root是根节点,target是目标字符串 {
Node cur = root; for(char c : target.toCharArray()) {
if(cur.nodes[c-'a']==null) cur.nodes[c-'a'] = new Node(); if(cur.str!=null)//将新的节点的str赋值,但 cur.nodes[c-'a'].str = cur.str+c; else cur.nodes[c-'a'].str = ""+c; cur = cur.nodes[c-'a']; } boolean flag = false; for (Node node : cur.nodes) {
if(node!=null) flag = true;//说明cur并不是end } if(!flag) cur.isEnd = true; } //查询前缀是target的字符串 public List
SearchPre(Node root,String pre)//root是根节点,pre是前缀字符串 {
List
list =new ArrayList<>(); Node cur = root; for(char c : pre.toCharArray()) {
if(cur.nodes[c-'a']==null) return list; cur = cur.nodes[c-'a']; } dfs(cur,list); return list; } //该函数利用深度优先搜索来添加 void dfs(Node root ,List
list) {
if(root.isEnd) list.add((root.str)); for(int i=0;i<26;i++) {
if(root.nodes[i]!=null) dfs(root.nodes[i],list); } }}

演示例子:

public class Test1 {
@Test public void Test() {
Node root = new Node(); root.add(root,"abc"); root.add(root,"abcd"); root.add(root,"acde"); List
ab = root.SearchPre(root, "abc"); for (String s : ab) {
System.out.println(s); } }}

结果:

在这里插入图片描述
下面提供3个练习地址:

转载地址:http://hslzi.baihongyu.com/

你可能感兴趣的文章
PL/SQL Developer技巧
查看>>
3-python之PyCharm如何新建项目
查看>>
15-python之while循环嵌套应用场景
查看>>
17-python之for循环
查看>>
18-python之while循环,for循环与else的配合
查看>>
19-python之字符串简单介绍
查看>>
20-python之切片详细介绍
查看>>
P24-c++类继承-01详细的例子演示继承的好处
查看>>
P8-c++对象和类-01默认构造函数详解
查看>>
P1-c++函数详解-01函数的默认参数
查看>>
P3-c++函数详解-03函数模板详细介绍
查看>>
P4-c++函数详解-04函数重载,函数模板和函数模板重载,编译器选择使用哪个函数版本?
查看>>
P5-c++内存模型和名称空间-01头文件相关
查看>>
P6-c++内存模型和名称空间-02存储连续性、作用域和链接性
查看>>
P9-c++对象和类-02构造函数和析构函数总结
查看>>
P10-c++对象和类-03this指针详细介绍,详细的例子演示
查看>>
bat备份数据库
查看>>
linux数据库导出结果集且比对 && grep -v ---无法过滤的问题
查看>>
shell函数与自带变量
查看>>
linux下shell获取不到PID
查看>>