IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法 T树(键树) -> 正文阅读

[数据结构与算法]算法 T树(键树)

T树

键树又称数字查找树(Digital Search Trees),它是一颗度>=2的树,树种的每个结点中不是包含一个或几个关键字,而是只含有组成关键字的符号,例如,若关键字是数值,则结点中只包含一个数位;若关键字是单词,则结点中只包含一个字母字符,这种树会给某种类型关键字的表的查找带来方便
在这里插入图片描述

T树的定义

const int MaxKeySize = 25;
const int LETLEN = 27;
typedef enum { BRCH = 0, ELEM = 1 } NodeType;

struct TrieNode;
typedef struct
{
	char ch[MaxKeySize];
	int curentSize;
}KeyType;
typedef struct  //元素 
{ 
	KeyType key;
	void* recptr;
}ElemType;   //key_value

typedef struct  //分支
{
	TrieNode* link[LETLEN];

}BrchType;

struct TrieNode
{
	NodeType type;
	union
	{
		ElemType item;
		BrchType brch;
	};
}

T树的插入

T树的插入就像再电话簿里插入电话一样,首先去找分支若没有分支则创建一个分支,再进行元素的插入,并且由于T树的特殊性,不能对T树进行删除操作

const int MaxKeySize = 25;
const int LETLEN = 27;
typedef enum { BRCH = 0, ELEM = 1 } NodeType;

struct TrieNode;
typedef struct
{
	char ch[MaxKeySize];
	int curentSize;
}KeyType;
typedef struct  //元素 
{ 
	KeyType key;
	void* recptr;
}ElemType;   //key_value

typedef struct  //分支
{
	TrieNode* link[LETLEN];

}BrchType;

struct TrieNode
{
	NodeType utype;
	union
	{
		ElemType item;  //元素
		BrchType brch;  //分支
	};
};

class TrieTree
{
private:
	TrieNode* root;
	static TrieNode* Buynode()
	{
		TrieNode* s = (TrieNode*)malloc(sizeof(TrieNode));
		if (nullptr == s)exit(1);
		memset(s, 0, sizeof(TrieNode));
		return s;
	}

	static int Index(const KeyType& kx, int k)
	{
		int index = 0;
		if (k < kx.curentSize)
		{
			index = kx.ch[k] - 'a' + 1;
		}
		return index;
	}

	static TrieNode* MakeElem(const ElemType& item) 
	{
		TrieNode* s = Buynode();
		s->utype = ELEM;
		s->item = item;
		return s;
	}
	static TrieNode* MakeBrch(TrieNode* ptr, int k)
	{
		TrieNode* s = Buynode();
		s->utype = BRCH;
		int index = Index(ptr->item.key, k);

		s->brch.link[index] = ptr;
		return s;
	}


public:
	TrieTree() :root(nullptr) {}
	~TrieTree() {}

	TrieNode* Find(const KeyType& kx)
	{
		TrieNode* p = root;
		int k = 0;
		while (p != nullptr && p->utype == BRCH)//分支
		{
			int index = Index(kx, k);
			k += 1;
			p = p->brch.link[index];
		}
		if (p != nullptr && strcmp(kx.ch, p->item.key.ch) != 0) //没找到 
		{
			p = nullptr;
		}
		return p;
	}

	void Insert_Item(TrieNode*& ptr, const ElemType& item, int k)
	{
		if (ptr == nullptr) //根为空
		{
			ptr == MakeElem(item); //建立元素结点
		}
		else if (ptr->utype == BRCH)
		{
			int index = Index(item.key, k);
			Insert_Item(ptr->brch.link[index], item, k + 1);
		}
		else if (ptr->utype == ELEM)
		{
			ptr = MakeBrch(ptr, k); //建立分支
			int index = Index(item.key, k);
			Insert_Item(ptr->brch.link[index], item, k + 1);
		}
	}
	bool Insert(const ElemType& item)
	{
		TrieNode* p = Find(item.key); //防止重赋值
		if (p != nullptr) 
		{
			return false;
		}
		int k = 0;
		Insert_Item(root, item, k);

		return true;
	}

};

int main()
{
	TrieTree tt;
	KeyType kx[] = { "data",4,"eye",3 ,"date",4,"dat",3,"egg",3};
	int n = sizeof(kx) / sizeof(kx[0]);
	for (int i = 0; i < n; ++i)
	{
		ElemType item = { kx[i],nullptr };
		tt.Insert(item);
	}

	return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-12 16:37:25  更:2022-05-12 16:39:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:40:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码