技术好文共享:算法之树表的查找

简介: 技术好文共享:算法之树表的查找

一、树表的查找


1.//代码效果参考:http://www.lyjsj.net.cn/wz/art_23975.html

概念

当表的插入、删除操作比较频繁时,为维护表的有序性,需要移动表中很多记录。需要适用动态查找表—几种特殊的树


表结构在查找过程中动态生成,对于给定key,若表中存在,则成功返回;否则,插入关键字等于key的记录。


有:二叉排序树、平衡二叉树、红黑树、B-树、B+树、建树


2.二叉排序树


也称二叉搜索树、二叉查找树,


1.定义:


二叉排序树或是空树,或是满足以下性质的二叉树:


1.若其左子树非空,则左子树上所有结点的值均小于根结点的值


2.若右子树非空,则右子树上所有结点的值均大于等于根结点的值


3.其左右子树本身又各是一颗二叉排序树


其中左子树上所有结点的值都小于根结点的值,右子树上所有结点的值都大于等于根结点的值。


每个子节点也都遵循整个定义


对二叉排序树进行中序遍历可以得到一个按关键字从小到大的有序表


2.查找算法:


类似于二分法。


typedef struct //代码效果参考:http://www.lyjsj.net.cn/wx/art_23973.html

{ // 定义二叉树结点结构

KeyType key // 关键字项


lnfoType otherinfo // 其他数据域


}ElemType


// 定义二叉树结构


typedef struct BSTNode {


ElemType data; // 数据域


struct BSTNode lchild, rchild // 左右孩子指针


}BSTNode, *BSTree


BSTree T


//查找算法-递归


BSTree SearchBST(BSTree T,KeyType key) {


if((!T) || key == T->data.key) return T


else if(key data.key))


return SearchBST(T->lchid,key) // 继续在左子数中查找


else return SearchBST(T -> rchild, key) // 继续在右子树中继续查找


}


思路:


1.若二叉排序树为空,则查找失败,返回空指针。


2.若非空,将给定值key与根结点的关键字进行比较,类似于二分查找法。


3.插入


思路:


1.若二叉树排序树为空,则插入结点作为根结点插入到空树中


2.若不为空,继续在其左、右子树上查找。


若树中已有,就不再插入.


若树中没有,查找直到某个叶子结点的左子树或右子树为空为止,则插入结点应为叶子结点的左孩子或右孩子


通过插入算法可以生成一个二叉排序树。一个无序序列可通过构造二叉排序树变成一个有序序列。,构造树的过程就是对无序序列//代码效果参考:http://www.lyjsj.net.cn/wx/art_23971.html

进行排序的过程。插入的结点均为叶子结点,无需移动其他结点,相当于在有序序列上插入记录二无需移动其他记录。

4.删除


删除只能和删除结点,不能删除以结点为根的子树,且还要保证删除后所得二叉树仍满足二叉排序树的性质不变。


1.被删除的结点是叶子结点:直接删去该结点。


2.被删除的结点只有右子树或者只有左子树,用其右子树或者左子树替换


3.被删除的结点既有左子树又有右子树,找到删除结点的左子树中的最大值,将其替换删除结点(或者找右子树上最小的结点)


2.平衡二叉树(AVL树)


一颗平衡二叉树或者是空树,或者是具有下列性质的二叉排列树:


左子树与右子树的高度之差的绝对值小于等于1


左子树和右子树也是平衡二叉排列树。


给每一个结点附加一个数字,给出该结点左子树与右子树的高度差。整个数组称为结点的平衡因子(BF)


平衡因子 = 结点左子树 - 结点右子树的高度


根据平衡二叉树的定义,平衡二叉树上所有结点的平衡因子只能说-1,0,1


每一个结点的左右指数相减,都是0或者-1.


对于一颗有n个结点的AVL树,其高度保持在O(log2n)数量级,ASL也保持在O(log2n)量级。


当我们在平衡二叉树排序树上插入一个结点时,可能会破坏平衡二叉树使其失衡。需要重新调整。


1.平衡二叉树的失衡处理


平衡二叉树的四种失衡类型:


调整方案:


调整原则:降低树的高度,保存二叉排序树性质。


理解:将某个子树中 结点的值处于中间位置提升至根结点。几种失衡类型就是根据插入值的大小来决定的)


2.平衡二叉树的构建


每插入一个结点都进一次平衡调整。

目录
打赏
0
0
0
0
32
分享
相关文章
基于 C# 深度优先搜索算法的局域网集中管理软件技术剖析
现代化办公环境中,局域网集中管理软件是保障企业网络高效运行、实现资源合理分配以及强化信息安全管控的核心工具。此类软件需应对复杂的网络拓扑结构、海量的设备信息及多样化的用户操作,而数据结构与算法正是支撑其强大功能的基石。本文将深入剖析深度优先搜索(Depth-First Search,DFS)算法,并结合 C# 语言特性,详细阐述其在局域网集中管理软件中的应用与实现。
49 3
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
本文系统讲解从基本强化学习方法到高级技术(如PPO、A3C、PlaNet等)的实现原理与编码过程,旨在通过理论结合代码的方式,构建对强化学习算法的全面理解。
62 10
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
|
12天前
|
基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
44 7
|
23天前
|
基于 Python 迪杰斯特拉算法的局域网计算机监控技术探究
信息技术高速演进的当下,局域网计算机监控对于保障企业网络安全、优化资源配置以及提升整体运行效能具有关键意义。通过实时监测网络状态、追踪计算机活动,企业得以及时察觉潜在风险并采取相应举措。在这一复杂的监控体系背后,数据结构与算法发挥着不可或缺的作用。本文将聚焦于迪杰斯特拉(Dijkstra)算法,深入探究其在局域网计算机监控中的应用,并借助 Python 代码示例予以详细阐释。
43 6
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
21 0
基于和声搜索优化算法的机器工作调度matlab仿真,输出甘特图
本程序基于和声搜索优化算法(Harmony Search, HS),实现机器工作调度的MATLAB仿真,输出甘特图展示调度结果。算法通过模拟音乐家即兴演奏寻找最佳和声的过程,优化任务在不同机器上的执行顺序,以最小化完成时间和最大化资源利用率为目标。程序适用于MATLAB 2022A版本,运行后无水印。核心参数包括和声记忆大小(HMS)等,适应度函数用于建模优化目标。附带完整代码与运行结果展示。
基于AES的遥感图像加密算法matlab仿真
本程序基于MATLAB 2022a实现,采用AES算法对遥感图像进行加密与解密。主要步骤包括:将彩色图像灰度化并重置大小为256×256像素,通过AES的字节替换、行移位、列混合及轮密钥加等操作完成加密,随后进行解密并验证图像质量(如PSNR值)。实验结果展示了原图、加密图和解密图,分析了图像直方图、相关性及熵的变化,确保加密安全性与解密后图像质量。该方法适用于保护遥感图像中的敏感信息,在军事、环境监测等领域具有重要应用价值。
基于免疫算法的最优物流仓储点选址方案MATLAB仿真
本程序基于免疫算法实现物流仓储点选址优化,并通过MATLAB 2022A仿真展示结果。核心代码包括收敛曲线绘制、最优派送路线规划及可视化。算法模拟生物免疫系统,通过多样性生成、亲和力评价、选择、克隆、变异和抑制机制,高效搜索最优解。解决了物流仓储点选址这一复杂多目标优化问题,显著提升物流效率与服务质量。附完整无水印运行结果图示。
基于免疫算法的最优物流仓储点选址方案MATLAB仿真
基于GA遗传优化TCN-GRU时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB2022a开发,提供无水印算法运行效果预览及核心程序(含详细中文注释与操作视频)。通过结合时间卷积神经网络(TCN)和遗传算法(GA),实现复杂非线性时间序列的高精度预测。TCN利用因果卷积层与残差连接提取时间特征,GA优化超参数(如卷积核大小、层数等),显著提升模型性能。项目涵盖理论概述、程序代码及完整实现流程,适用于金融、气象、工业等领域的时间序列预测任务。
基于遗传优化算法的多AGV栅格地图路径规划matlab仿真
本程序基于遗传优化算法实现多AGV栅格地图路径规划的MATLAB仿真(测试版本:MATLAB2022A)。支持单个及多个AGV路径规划,输出路径结果与收敛曲线。核心程序代码完整,无水印。算法适用于现代工业与物流场景,通过模拟自然进化机制(选择、交叉、变异)解决复杂环境下的路径优化问题,有效提升效率并避免碰撞。适合学习研究多AGV系统路径规划技术。
下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等