一、简介
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
它有3个基本性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符; 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串; 每个节点的所有子节点包含的字符都不相同。
其基本操作有:查找、插入和删除,当然删除操作比较少见。
二、代码实现
1、java的实现
package com.yzl.controller;
/**
* ClassName: Trie
* Description: 字典树算法的实现
* date: 2021/5/30 6:33 下午
*
* @author yangzhiliang
*/
public class Trie {
private int SIZE=26;
private TrieNode root;//字典树的根
/**
* @description: 字典树构造方法
* @author: yangzhiliang
* @date: 2021/5/30
* @param : null
* @return: null
*/
Trie()
{
root=new TrieNode();
}
/**
* @description: 字典树节点类
* @author: yangzhiliang
* @date: 2021/5/30
*/
private class TrieNode
{
//有多少单词通过这个节点,即由根至该节点组成的字符串模式出现的次数
private int num;
//所有的子节点
private TrieNode[] son;
//是不是最后一个节点
private boolean isEnd;
//节点的值
private char val;
//是否有子节点
private boolean haveSon;
/**
* @description: 字典树节点类构造方法
* @author: yangzhiliang
* @date: 2021/5/30
* @param : null
* @return: null
*/
TrieNode()
{
num=1;
son=new TrieNode[SIZE];
isEnd=false;
haveSon=false;
}
}
/**
* @description: 字典树节点插入方法
* @author: yangzhiliang
* @date: 2021/5/30
* @param str: 要插入的字符串
* @return: null
*/
public void insert(String str)
{
//当插入的字符串为空,或字符串的长度为0,直接返回
if(str==null||str.length()==0)
{
return;
}
//新建一个节点实例
TrieNode node=root;
//将字符串转化为字节数组
char[] letters = str.toCharArray();
//循环遍历字符串
for(int i=0,len=str.length(); i<len; i++)