查找中常见的树数据结构

news/2024/4/28 9:36:30/文章来源:https://blog.csdn.net/weixin_65032328/article/details/136921278

查找中常见的树数据结构

  • 一、排序二叉树
  • 二、平衡二叉树
  • 三、红黑树(自平衡二叉树)
  • 四、B树
  • 五、B+树


  • 在动态查找中常见的树相关的数据结构包括:
    • 排序二叉树(Binary Search Trees)
    • 平衡二叉树(AVL Trees,Balanced binary search trees)
    • 红黑树(自平衡二叉树)(Red-Black Trees)
    • B树
    • B+树
  • 区别:树的高度不同。树的高度越低,性能越高。这是因为每一个节点都是一次I/O
  • 推荐一个数据结构可视化网站 Data Structure Visualizations,是旧金山大学(USFCA)的一个网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

一、排序二叉树

  • 排序二叉树结构默认的就是左小右大的排序方式,并且采用中序遍历(根节点在中间),得到的就是按照升序排序好的数据。(对应的还有前序遍历后序遍历
  • 有这样一个表:
    在这里插入图片描述
  • 按照二叉树的方式排序的结果是:
    在这里插入图片描述
  • 如果不给 id 字段添加索引,默认就是全表扫描,假设查询id=10的数据,那至少进行10次磁盘IO。效率低。如果给id字段添加索引,假设该索引使用了二叉树这种数据结构,那么IO的次数就是4次。查询效率显著提高了。
  • 排序二叉树的缺陷
    • 这种普通二叉树在数据极端插入的节点集本身就是有序的,要么从小到大排列,要么由大到小排列)的情况下,效率较低。比如下面的这个二叉树:
      在这里插入图片描述
    • 在这种极端的情况下。该二叉树就像是一个链表。查找效率下降到了O(n)。查询效率极低。

二、平衡二叉树

  • 为了避免出现上述一边倒的存储,于是就提出了平衡二叉树
  • 在平衡二叉树中任何节点的两个子树的高度最大差值为1,所以它也被称为高度平衡树增加或删除结点可能需要通过一次或多次树旋转来重新平衡这个树
  • 结点的平衡因子是它的左子树的高度减去它的右子树的高度(有时相反)。带有平衡因子1、0、-1的节点被认为是平衡的。带有平衡因子-2或2的节点被认为是不平衡的,并需要重新平衡这个树。
  • 比如,我们存储排序好的数据 【3、4、8、12、13、14、16、23】,增加结点如果出现不平衡,则通过节点的左旋或右旋,重新平衡树结构,最终平衡二叉树如下图所示:
    在这里插入图片描述

三、红黑树(自平衡二叉树)

  • 红黑二叉树(简称:红黑树),它首先是一颗二叉树,同时也是一颗自平衡排序二叉树
  • ② 红黑树在原有的排序二叉树增加了如下几个要求:
    • 每个结点要么红色,要么黑色。
    • 根结点永远是黑色。
    • 所有的叶子结点都是空结点(即null),并且是黑色的。
    • 每个红色结点的两个子结点都是黑色从每个叶子结点到根结点的路径上不会有两个连续的红色结点)。
    • 从任一结点到其子树中每个叶子结点的路径都包含相同数量的黑色结点。
    • 每次新结点在插入时,颜色是红色的。插入后,会根据红黑树的约束条件进行:树的旋转和颜色的调整。
  • ③ 这些约束强化了红黑树的关键性质:从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。这样就让树大致上是平衡的。
  • ④ 红黑树是一个更高效的检索二叉树,JDK 提供的集合类 TreeMap、TreeSet 本身就是一个红黑树的实现。红黑树的基本操作:插入、删除、左旋、右旋、着色。每插入或者删除一个结点,可能导致树不在符合红黑树的特现,需要进行修复,进行 “左旋、右旋、着色” 操作,使树继续保持红黑树的特性。
    在这里插入图片描述

四、B树

  • B Trees 中的 B 指的是:Balanced(平衡)。
  • B树首先是一个自平衡的。
  • B树每个节点下的子节点数量>2。
  • B树每个节点中也不是存储单个数据,可以存储多个数据。
  • B树又称为平衡多路查找树
  • B树分支的数量不是2,是大于2,具体是多少个分支,由决定。例如:
    • 3阶的B树,一个节点下最多有3个子节点,每个节点中最多有2个数据。
    • 4阶的B树,一个节点下最多有4个子节点,每个节点中最多有3个数据。
    • 5阶(5,4)
    • 16阶(16,15)【MySQL采用了16阶】
  • 采用B树,B树的高度更低。磁盘IO次数更少。
  • 4阶的B树如下:
    在这里插入图片描述
  • 在数据库中,每个节点不仅存储了索引值,还存储该索引值对应的数据行
  • B树的缺点:
    • 不适合做区间查找,对于区间查找效率较低。每次都要从根节点开始。所以在 MySQL 中使用了 B+ Trees 来解决这个问题。

五、B+树

  • B+树将数据都存储在叶子节点中。并且叶子节点之间使用指针连接,这样很适合范围查询
  • B+树的非叶子节点上只有索引值,没有数据,所以非叶子节点可以存储更多的索引值,这样让B+树更矮胖,提高检索效率。
    在这里插入图片描述
  • 如果存在这样一张表:
    在这里插入图片描述
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssh 公私钥

一、生成ssh公私钥 生成自定义名称的SSH公钥和私钥对,需要使用ssh-keygen命令,这是大多数Linux和Unix系统自带的标准工具。下面,简单展示如何使用ssh-keygen命令来生成具有自定义名称的SSH密钥对。 步骤 1: 打开终端 首先,打开我…

鸿蒙HarmonyOS应用开发之在NDK工程中使用预构建库

在NDK工程中,可以通过CMake语法规则引入并使用预构建库。在引用预构建库时,模块libs目录中的预构建库,以及在CMakeList.txt编译脚本中声明的预构建库都会被打包。 例如在项目中需要使用预构建库libavcodec_ffmpeg.so,其开发态存放…

【数据库管理操作】Mysql 创建学生数据库及对数据表进行修改

MySQL 创建学生成绩数据库 1.创建数据库 create database studentscore;创建完成之后,如果需要使用该数据,使用use命令 use studentscore;创建表前查看当前数据库中包含的表 show tables; 2.创建bclass表 create table bclass( class_id char(8) …

蓝桥杯刷题day09——霓虹【算法赛】

一、问题描述 晚上,小蓝正无聊的走在大路上,小蓝所在的街区是—个带有赛博朋克风格的街区。 他抬头—看,看到了很多霓虹灯牌。在其中的某一个店铺前,挂着一排的数字灯牌,每一个数字的显示都依靠7段LED管,亮着的灯管组成数字,具体来说如下图所示: 小蓝刚学过数字电路,他…

数据库系统概论-第3章 关系数据库标准语言SQL

3.1 SQL概述 3.2 学生-课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 空值的处理 3.7 视图 3.8 小结

Java_19 罗马数字转整数

罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1…

vue3+threejs新手从零开发卡牌游戏(十三):上场手牌添加攻击力文字

在utils/common.ts下新建渲染场上手牌文字方法: // 渲染场上手牌文字 const renderSiteCardText (mesh: any, font: any) > {return new Promise((resolve, reject) > {let pos mesh.positionconst geometry new TextGeometry( ATK ${mesh.userData._ATK}…

蓝桥杯2023省赛:矩阵总面积|模拟、数学(几何)

题目链接: 0矩形总面积 - 蓝桥云课 (lanqiao.cn) 说明: 参考文章:矩形总面积计算器:计算两个矩形的总面积,包括重叠区域_矩形r1的左下角坐标为x1, yl 、宽度为w1、高度为h1, 矩形r2的左下角坐标为x2,y2、宽-CSDN博客…

面试算法-93-交错字符串

题目 给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串 &#xff1a; s s1 s2 … sn t t1 t2 … tm |n - m| < 1 交错…

如何用联合(共用体)union验证系统大小端

一&#xff1a;思路 由联合体的特点&#xff0c;可知上图&#xff0c;char c 和 int i 共用四个字节&#xff0c;假设是小端&#xff0c;则由左到右是低地址到高地址&#xff0c;四个字节的内容如图所示01 00 00 00 代码展示&#xff1a; 如果第一个字节是1&#xff0c;则证明…

爱上数据结构:顺序表和链表

一、线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条…

NAT---网络地址转换技术

Network Address Translation 1、起源&#xff1a;ip地址不够用 2、作用&#xff1a;让私网地址映射成公网地址&#xff0c;进而访问网络。 3、私网Ip地址的范围&#xff1a; A类&#xff1a;10.0.0.0-10.255.255.255 B类&#xff1a;172.16.0.0-172.31.255.255 C类&…

Vue3更新Package.json版本号

由于我之前已经更新过了&#xff0c;下面的方法提示我已经是最新的了&#xff0c;记录一下&#xff0c;过段时间在测试一下 npm install -g vue/clivue upgrade

数据库被.[Goodmorningfriends@onionmail.org].faust勒索病毒加密,能恢复吗?

.faust勒索病毒有什么特点及危害&#xff1f; .faust勒索病毒是一种恶意软件&#xff0c;以其复杂的加密技术和勒索行为而闻名。这种病毒的主要目标是通过加密受害者的数据文件&#xff0c;然后勒索赎金以解密这些文件。它通常通过恶意附件、恶意链接或潜在的不安全下载源传播&…

【推导结果】如何得到 回归均方误差 估计系数的标准误

对线性回归模型系数标准差标准误的理解 1.生成数据 yxe3.610.633.42-1.387.631.017.44-1.0111.651.3811.46-0.63 2.回归 y β 0 β 1 x ϵ y \beta_{0}\beta_{1}x\epsilon yβ0​β1​xϵ y i β 0 β 1 x i e i y_{i}\beta_{0}\beta_{1} x_{i}e_{i} yi​β0​β1​xi…

虚拟机如何在原有磁盘上扩容

虚拟机未开启状态–菜单栏–虚拟机–快照–拍摄快照–拍摄快照– 菜单栏–虚拟机–快照–快照管理器–点击刚刚的快照1–删除–是– 文件–新建或者打开–硬盘&#xff08;以本人Win 10.64.3GL为例&#xff09;–虚拟机设置–硬件– 硬盘&#xff08;SATA&#xff09;–磁盘实…

浏览器导出excel

做java web项目时&#xff0c;经常遇到需要在页面上点击导出按钮&#xff0c;然后直浏览器接下载下来一个excel文档。 比如一个List<Person>的集合&#xff0c;需要将每个Person当做一行&#xff0c;输出到excel中去。其中Person实体类如下&#xff1a; import lombok.…

Linux系统使用Docker部署Portainer结合内网穿透实现远程管理容器和镜像

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

LeetCode 1027——最长等差数列

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 假设我们以 f[d][nums[i]]表示以 nums[i] 为结尾元素间距为 d 的等差数列的最大长度&#xff0c;那么&#xff0c;如果 nums[i]-d 也存在于 nums 数组中&#xff0c;则有&#xff1a; f [ d ] [ n u m s [ i ] ] …

GPT-5有望在今年夏季到来

当OpenAI一年前发布了GPT-4 AI模型时&#xff0c;整个行业都被这个能模仿人类交流和写作的技术所震撼&#xff0c;同时也引发了一阵巨大的炒作和恐慌。自那以后&#xff0c;AI界许多人都关心的问题是&#xff1a;GPT-5什么时候出来&#xff1f;在全球各地的采访和媒体露面中&am…