动态查找表

news2024/11/24 19:14:40

动态查找表

  • 1.二叉排序树
    • 1.1. 定义
    • 1.2. 查找过程
    • 1.3. 插入过程
    • 1.4. 创建二叉排序树
    • 1.5. 删除操作
      • (1)被移除的结点是叶子结点
      • (2)被移除的结点只有左子树或者只有右子树;
      • (3)被移除的结点既有左子树,也有右子树。
    • 1.6 性能分析
  • 2.平衡二叉树
    • 2.1 定义
    • 2.2. 插入时的最小不平衡子树
    • 2.3. 最小不平衡子树调整类型
      • LL型
      • RR型
      • LR型
      • RL型
    • 2.4 平衡二叉树的查找分析
    • 2.5 平衡二叉树的结点删除
      • 平衡二叉树删除结点后的处理
      • 最小不平衡子树类型的确定

在这里插入图片描述

1.二叉排序树

在这里插入图片描述

1.1. 定义

或者是一棵空树;或者是具有如下特性的二叉树:

  1. 若它的左子树不空,则左子树上所有结点的值均小于根结点的值;
  2. 若它的右子树不空,则右子树上所有结点的值均大于根结点的值;
  3. 它的左、右子树也都分别是二叉排序树。

在这里插入图片描述

二叉排序树的中序序列是一个有序的序列

1.2. 查找过程

在这里插入图片描述

在查找过程中,逐步缩小查找范围的过程,并生成了一条查找路径

【算法描述】
在这里插入图片描述

1.3. 插入过程

  • 插入的结点只能是叶子结点
  • 插入是基于查找失败情况下插入的

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当二叉排序树为空时,插入操作会改变指向根结点的指针,所以p是BiTree *类型的,*p是p指向的对象。

1.4. 创建二叉排序树

二叉排序树在查找的过程中从无到有,动态生成

在这里插入图片描述
【插入算法】
在这里插入图片描述
【创建算法】
在这里插入图片描述

1.5. 删除操作

要求: 确保移除之后,依然保持排序

存在三种情况:

(1)被移除的结点是叶子结点

在这里插入图片描述
删除操作中的指针变量p在查找过程中存放的是结点左孩子变量或右孩子变量的地址,*p是结点的左孩子或右孩子变量。一旦查找成功,*p中存放的是待删结点的地址,*p指向待删除结点。q记被删除的结点,以便释放被删除结点的空间

(2)被移除的结点只有左子树或者只有右子树;

在这里插入图片描述
在这里插入图片描述

(3)被移除的结点既有左子树,也有右子树。

前驱替换方案:找到被删除结点的中序前驱(即左分支中的最大值),替换待删结点的值,并删除该前驱。
在这里插入图片描述

在这里插入图片描述
注意:左分支是否是左单分支

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
先找到在删除
在这里插入图片描述
【删除描述】
在这里插入图片描述
在这里插入图片描述

1.6 性能分析

在这里插入图片描述
树的形状取决于关键字集合和插入次序

所以,为了保证二叉排序树的左右结点数均分,要在插入的时候进行调整,构建平衡二叉树

2.平衡二叉树

在这里插入图片描述

2.1 定义

什么样的二叉排序树是平衡二叉树?

结点的平衡因子:该结点的左子树的深度H L 与右子树的深度H R 之差

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

  1. 根结点的左子树和右子树的平衡因子为-1、0或1;
  2. 根结点的左子树和右子树也都是二叉平衡树。

结点的平衡因子=左子树的深度H L - 右子树的深度H R
在这里插入图片描述
在这里插入图片描述
现象:一棵平衡二叉树,结点的插入或删除,都可能会导致失衡

最小不平衡子树:失衡的结点及其关联结点构成的是一棵高度为2的子树,由三个结点、两条边构成。

对策:针对这棵子树,做平衡化处理(Rebalance)

2.2. 插入时的最小不平衡子树

平衡因子的计算:每当插入一个新结点时,都需要重新计算从新插入的结点到根结点的
路径上所包含结点的平衡因子,一旦找到失衡点,停止计算。

最小不平衡子树:在根到插入结点的查找路径中,以距离插入结点最近的、且平衡因子
的绝对值大于1的结点为根,沿此查找路径再找两个结点构成这棵最小不平衡子树。
在这里插入图片描述
最小不平衡子树的调整再平衡(Rebalance)

在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的链接关系,进行相应的旋转,将最小不平衡子树的高度2降低到高度1,使之成为新的平衡子树

在这里插入图片描述

2.3. 最小不平衡子树调整类型

在这里插入图片描述

LL型

在这里插入图片描述
在这里插入图片描述

RR型

在这里插入图片描述
在这里插入图片描述

LR型

在这里插入图片描述
在这里插入图片描述

RL型

在这里插入图片描述
在这里插入图片描述

2.4 平衡二叉树的查找分析

在这里插入图片描述

2.5 平衡二叉树的结点删除

在这里插入图片描述

平衡二叉树删除结点后的处理

在这里插入图片描述

最小不平衡子树类型的确定

在这里插入图片描述
【例题】
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/616787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

两张图理解MR与XR

我们知道,AR是在现实世界上叠加虚拟信息和图像,VR是完全模拟的虚拟世界,那么对于MR和XR的概念会稍显复杂,本文试图通过2张图来理解它们,如有不对,祈请纠正。 MR 关于MR,先来看看下面第一张图。 …

vue 3 第三十四章:nextTick

nextTick是Vue3中的一个非常有用的函数&#xff0c;它可以在下一次DOM更新循环结束后执行回调函数。这个函数可以用来解决一些异步更新视图的问题&#xff0c;例如在修改数据后立即获取更新后的DOM节点。以下是一个简单的示例&#xff1a; <template><div><p&g…

华硕无畏灵耀破晓原装Windows10/11系统

第一步&#xff1a;下载原装系统文件 第二步&#xff1a;灵耀/无畏/破晓需要自备16g空u盘安装 第三步&#xff1a;创建u盘分区&#xff0c;第一个分区格式为FAT32(存放TLK引导文件)&#xff0c;第二个分区大小为NTFS&#xff08;存放底包&#xff1a;HDI.OFS.SWP.EDN.KIT&…

Unity Package Manager 使用

项目组开发的工具可以托管到远程仓库里&#xff0c;别的项目 也可以使用。 在Unity工程Assets 下 创建自己的插件目录 运行时 代码 和 编辑器代码 &#xff0c;创建 对应的 程序集&#xff0c;以及package.json 文件 package.json内容&#xff1a;可参考官方的&#xff0c;n…

测试人何去何从?2023年测试工程师突破自我,卷出测试圈...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 2023年测试行业现…

被上司问“测得怎么样了?”我心里慌到不行

目录 前言 你测的怎么样了&#xff1f; 这样回答 初入测试职场 结尾&#xff1a; 前言 说实话&#xff0c;我真想从上面去掉"似乎"两个字&#xff0c;软件测试人&#xff0c;就是苦逼&#xff01;有的人曾抱怨过开发很糟糕&#xff0c;但我们没办法要求开发在会写代…

360浏览器如何屏蔽某搜索网站的热搜

1.安装油猴&#xff08;Tampermonkey插件&#xff09; 下载油猴&#xff1a;官网油猴tampermonkey官网_油猴脚本手机版油猴插件下载 安装&#xff1a;360浏览器安装可以参考这边文章。 地址&#xff1a;http://www.xz7.com/article/86938.html 其实就是下载crx文件后&#xff…

linuxOPS基础_linux沾滞位T(sticky bit)

命令&#xff1a;chmod 语法&#xff1a;# chmod [选项] 文件夹 作用&#xff1a;只允许文件的创建者和root用户删除文件 常用选项&#xff1a;ot 添加粘滞位 ​ o-t 去掉粘滞位 ​ 用法&#xff1a;chmod ot 目录名 示例代码&#xff1a; #chmod ot 含义&#xff1a;给…

复习之linux系统中的文件传输

一、实验环境设定 本节实验需要两台虚拟机&#xff0c;ip与主机在同一网段&#xff0c;可实现ssh连接&#xff01; 1.创建虚拟机westosb 因为之前实验已存在一台虚拟机westosa,因此还需创建一台虚拟机westosb! 使用# westos-vmctl create westosb 创建虚拟机出错&#…

一个软件测试工程师的岗位职责

其实软件测试入门并不难 我们自己生活中就有接触过很多跟软件测试相关的操作。而要是从事软件测试的工作&#xff0c;就是需要对软件进行更加系统的测试&#xff0c;并把你所测试的东西进行归纳总结&#xff0c;对软件整个使用和运行情况做一个系统、规范的报告。 软件测试的学…

初识哈希表

哈希表 1.引入2.哈希思想3.哈希技术的三个关键问题3.1 哈希表容量的设计3.2 哈希技术关键之二&#xff1a;哈希函数哈希函数构造方法哈希函数示例&#xff1a;线性函数哈希函数示例&#xff1a;除留余数法 3.3 哈希技术关键之三:解决冲突策略开放定址法开放定址法——线性探测法…

路径规划算法:基于动物迁徙优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于动物迁徙优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于动物迁徙优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

C#实例:多功能Windows窗体应用程序Helloworld_WinForm

有了创建一个Windows窗体应用程序的经验&#xff0c;就可以开始尝试运用更多的控件实现更多丰富的功能界面。以下分享我基于项目Helloworld_WinForm使用常用C#Windows窗体控件实现一些小功能。 每一节标题为所用到的控件&#xff0c;全文以实际制作过程为序编制。 目录 WinFor…

Explorer.exe系统错误,电脑重启后刚开始一段时间正常,过一会桌面任务栏就卡死,可以打开任务管理器

环境: 联想E14 Win10专业版 问题描述: 1.重启系统后刚开始一段时间点击任务栏正常,过一会桌面任务栏就卡死,可以打开任务管理器,任务管理器查看shell infrastructure占用cpu比较多,网上说是微软图片查看软件导致,重置改了默认照片查看器,恢复这个应该不是主要原因 …

数组题目总结 -- 随机数问题

目录 一. O(1) 时间插入、删除和获取随机元素思路和代码&#xff1a;I. 博主的做法II. 东哥的做法III. 其他做法 二. 黑名单中的随机数思路和代码&#xff1a;I. 博主的做法II. 东哥的做法 一. O(1) 时间插入、删除和获取随机元素 题目链接&#xff1a;https://leetcode.cn/pr…

如何提升邮件点击率?诀窍速递

相比邮件的打开率&#xff0c;邮件点击率可以更好地评估邮件营销的表现&#xff0c;帮助营销人员评估营销活动是否有帮助推动销售、培养潜在客户或提升品牌知名度等。如何更好地提升电子邮件的点击率&#xff0c;本文6个小贴士来助力。 这里给大家推荐一站式客服系统SaleSmartl…

芒种忙什么呢?当然是抢个中国人民大学与加拿大女王大学金融硕士项目的入学名额了

今日是农历的芒种&#xff0c;大家都在忙什么呢&#xff1f;“芒种”一词最早出自《周礼》中的“泽草所生&#xff0c;种之芒种。”其中“芒”指的是在阳光照耀下如波浪般摇摆的麦芒&#xff0c;表明此时已经成熟可以收割了。而“种”则代表稻谷&#xff0c;这时候是种稻谷的最…

066:cesium flyto一个具体的点位置

第066个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置飞行定位功能,如果你知道位置的经纬度和高度,你可以使用相机的 flyTo 函数直接飞到 CesiumJS 中的那个位置。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式…

【数据存储:揭开内存中数据存储的神秘面纱】

本节重点 -- 重中之重 数据类型详细介绍 整形在内存中的存储&#xff1a;原码、反码、补码 大小端字节序介绍及判断 浮点型在内存中的存储解析 准备好了&#xff0c;开始啰&#xff0c;在小小的花园里面......最近被这个歌曲洗脑&#xff0c;但是我们并不是要唱歌&#xff0c;而…

分布式数据库HBase

大数据基础-分布式数据库HBase 概述HBase简介HBase与传统关系数据库的对比分析 HBase数据模型数据模型概述数据模型相关概念数据坐标 HBase的实现原理HBase功能组件表和RegionRegion的定位HBase框架结构HMasterRegionServerHBase协作组件RegionColumnFamilyKeyValue小结 HBase运…