字典树(Trie树)的原理与实现

字典树是一种高效的字符串数据结构,具备优化查询时间、减少字符串比较的特点。本文详细介绍了字典树的基本概念、性质、应用场景及优势,并通过逐步解析构建、查找、遍历等操作的实现过程,帮助读者深入掌握这一数据结构。
摘要由CSDN通过智能技术生成

一、概述

1.1 基本概念

字典树,又称为单词查找树,Tire数,是一种树形结构,它是一种哈希树的变种。

在这里插入图片描述

1.2 基本性质

  • 根节点不包含字符,除根节点外的每一个子节点都包含一个字符
  • 从根节点到某一节点。路径上经过的字符连接起来,就是该节点对应的字符串
  • 每个节点的所有子节点包含的字符都不相同

1.3 应用场景

典型应用是用于统计,排序和保存大量的字符串(不仅限于字符串),经常被搜索引擎系统用于文本词频统计。

1.4 优点

利用字符串的公共前缀来减少查询时间,最大限度的减少无谓的字符串比较,查询效率比哈希树高。

二、trie树的构建与操作实现

2.1 字典树节点定义

//定义字典表节点(简化设计,仅兼容26个小写英文字符)
class TrieNode {
   
	
	private int num; //有多少单词经过当前节点,即由根节点到该节点组成的字符串模式出现的次数
	private TrieNode[] son;//子节点数组
	private boolean wordEnd;//是否是叶子结点
	private char val;//当前节点的值
	
	TrieNode() {
   
		num =1;
		son = new TrieNode[engNum];
		wordEnd = false;
	}
}

2.2 字典树构造函数

public Trie() {
   
		root = new TrieNode();
	}

2.3 建立字典树

//建立字典树
public void insert(String str) {
   
	if(StringUtils.isEmpty(str)) {
   
		return;
	}
	TrieNode curNode = root;
	char[] arr = str.toCharArray();
	for(char c:arr) {
   
		int index = c-'a';
		TrieNode node = curNode.son[index];
		if(node == null) {
   
			//当前节点为空则创建
			curNode.son[index] = new TrieNode();
			curNode.son[index].val = c;
		}else {
   
			//不为空则加一
			node.num = node.num +1;
		}
		curNode = curNode.son[index];
	}
	curNode.wordEnd = true;
}

2.4 在字典树中查找是否完全匹配一个指定的字符串

//在字典中查找一个完全匹配的单词
public boolean has(String str) {
   
	if(StringUtils.isEmpty(str
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值