【面经】查找中常见的树数据结构

查找中常见的树数据结构

  • 一、二叉排序(搜索、查找)树(BST,Binary Search Tree)
    • (1)二叉排序树的查找、插入和删除过程
    • (2)叉树排序树的缺陷
    • (3)二叉排序树的改进
  • 二、平衡二叉树(AVL Tree,Balanced binary search tree)
    • (1)平衡二叉树的缺陷
    • (2)平衡二叉树的改进
  • 三、红黑树(自平衡二叉树)(Red-Black Trees)
  • 四、B树(平衡多路查找树)
    • (1)B Tree的缺点
  • 五、B+树
  • 六、B树和B+树的区别


  • 在动态查找中常见的树相关的数据结构包括:
    • 二叉排序(搜索、查找)树(BST,Binary Search Tree),左小右大原则。
    • 平衡二叉树(AVL Tree,Balanced Binary Search Tree),平衡因子不大于1.
    • 红黑树(红黑二叉树)(Red-Black Tree),大致平衡,最长路径长度不大于最短路径长度的两倍。
    • B树(平衡多路查找树),允许一个结点有多个子结点并且每个结点可以存储多个key和data。
    • B+树,所有的data都存储在叶子结点并且使用指针将叶子结点链接起来,便于区间查找。
  • 区别:树的高度不同。树的高度越低,性能越高。这是因为每查找一个节点都是一次I/O
  • 推荐一个数据结构可视化网站 Data Structure Visualizations,是旧金山大学(USFCA)的一个网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

一、二叉排序(搜索、查找)树(BST,Binary Search Tree)

  • 二叉排序树结构默认的就是左小右大的排序原则。
  • 二叉排序树性质:非空左子树的所有键值小于其根结点的键值;非空右子树的所有键值大于其根结点的键值;左右子树都是二叉搜索树。
  • 有这样一个表:
    在这里插入图片描述
  • 按照二叉排序树的方式排序的结果是:
    在这里插入图片描述
  • 对于二叉排序树进行中序遍历,即可得到从小到大的有序序列。它利用了二分的思想,可以快速查找到关键码,查找效率为O(logn)。

(1)二叉排序树的查找、插入和删除过程

  • 查找:
    • 从根节点开始,如果要查找的关键码大于当前关键码,则下一个查找的结点为根节点的右子树,反之则是左子树。 再以新节点为根,重复以上的查找步骤,直到查到得到匹配的关键码为止。
  • 插入:
    • 基于查找操作进行查找合适的位置进行插入。 该合适的位置指的是按照查找步骤进行到的叶子节点处,若欲插入的关键码大于该叶子结点,则插入为右孩子,反之为左孩子。 插入的结点必须是叶子结点。 若开始树空,则直接成为根节点;若欲插入的关键码已存在,则插入失败。 二叉树的构造过程也是不断插入的过程。
  • 删除:
    • 同样是基于查找操作,首先查找到欲删除的结点。此时,删除结点通常包括三种情况
      • ①若删除的结点是叶子结点,则可以直接将结点删去;(0个)
      • ②若删除的结点只有左孩子或者右孩子,则用它的孩子代替它;(1个)
      • ③若删除的结点有左右孩子,则可以寻找其中序遍历的直接前驱(左子树最右边的叶子结点)或者直接后继(右子树最左边的叶子结点)代替它,再删去该直接前驱或直接后继。(2个)

(2)叉树排序树的缺陷

  • 这种普通二叉排序树在数据极端插入的节点集本身就是有序或有一定的顺序的,要么从小到大排列,要么由大到小排列)的情况下,效率较低。比如下面的这个二叉树:
    在这里插入图片描述
  • 在这种极端的情况下。该二叉树就像是一个链表。查找效率下降到了O(n)。查询效率极低。

(3)二叉排序树的改进

  • 插入时要保证二叉树的平衡因子的绝对值不大于1,于是产生了平衡二叉树(AVL树)。
  • 可以参考的博客

二、平衡二叉树(AVL Tree,Balanced binary search tree)

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

(1)平衡二叉树的缺陷

  • 如果插入操作比查询操作多, AVL 就要花费大量开销做旋转来调整节点以保证树的平衡。

(2)平衡二叉树的改进

  • 为了减少旋转开销,引入了红黑树。
  • 平衡二叉(AVL)树中的 LL旋转、RR旋转、LR旋转、RL旋转 的详细解释

三、红黑树(自平衡二叉树)(Red-Black Trees)

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

四、B树(平衡多路查找树)

  • B Tree 中的 B 指的是:Balanced(平衡),B树首先是一个自平衡的。
  • B树相比于前面的各种二叉树,B树允许每个结点可以有更多的子结点并且每个结点中可以存储多个key值。
    在这里插入图片描述
  • 采用B树,B树的高度更低。磁盘IO次数更少。

(1)B Tree的缺点

  • 不适合做区间查找,对于区间查找效率较低。每次都要从根节点开始。所以在 MySQL 中使用了 B+ Trees 来解决这个问题。

五、B+树

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

六、B树和B+树的区别

  1. 单个结点只存储key值,不存储数据,所有的数据都存储在叶子结点中,能够存储更多的元素,减少磁盘的IO次数,所以B+树更加适合作为MySQL数据库的底层数据结构。
  2. B+树的叶子结点相互之间有一个链路,形成了一个有序的链表,便于区间查找。

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

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

相关文章

Spark原理及调优

spark官档 hints:https://spark.apache.org/docs/3.0.0/sql-ref-syntax-qry-select-hints.html调优参数:https://spark.apache.org/docs/latest/sql-performance-tuning.html#join-strategy-hints-for-sql-queries作者几乎把所有的RDD API查了个遍&…

【服务器入门】Linux系统基础知识

【服务器入门】Linux系统基础知识 远程登录与文件传输基础命令与文本编辑vi/vim使用shell脚本基本命令1、目录操作2、文件创建与删改3、文件连接与查看 参考 目前超算使用的系统以Linux系统为主,肯定需要了解一些相关知识。本博客就以本人运行WRF模型所需&#xff0…

7-50 畅通工程之局部最小花费问题 (kruskal)

输入样例: 4 1 2 1 1 1 3 4 0 1 4 1 1 2 3 3 0 2 4 2 1 3 4 5 0输出样例: 3 代码&#xff1a; #include<iostream> #include<queue> using namespace std; const int N110; struct node{int x,y,w;bool operator <(const node &n1)const{if(wn1.w) retur…

提升编程效率的秘诀:多数人竟然忽略了它!

在编程学习的过程中&#xff0c;许多人会专注于算法、数据结构、编程语言的学习&#xff0c;而往往忽略了一个至关重要的基础技能——键盘盲打。虽然看似与编程能力无关&#xff0c;但盲打不仅可以显著提高编程效率&#xff0c;还能帮助编程者更好地集中注意力。本文将深入探讨…

数字图像面积计算一般方法及MATLAB实现

一、引言 在数字图像处理中&#xff0c;经常需要获取感兴趣区域的面积属性&#xff0c;下面给出图像处理的一般步骤。 1.读入的彩色图像 2.将彩色图像转化为灰度图像 3.灰度图像转化为二值图像 4.区域标记 5.对每个区域的面积进行计算和显示 二、程序代码 %面积计算 cle…

加密视频播放器 EncodedPlayer V3.1使用说明

使用说明 加密视频播放器 EncodedPlayer可对视频发布者提供的特定加密视频进行播放&#xff0c;以达到保护视频内容不被未经授权的用户访问或盗版的目的。 点击【打开】可选择格式为.Apol的加密视频文件并进行播放。为防止视频翻录&#xff0c;播放器会在视频中添加当前用户…

银河麒麟操作系统重装后重新激活是否会额外消耗一个激活码?

银河麒麟操作系统重装后重新激活是否会额外消耗一个激活码&#xff1f; 1、激活码会额外消耗吗&#xff1f;2、重装后如何重新激活&#xff1f;3、注意事项4 总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在使用银河麒麟操作系统时&a…

解释器模式:将语法规则与执行逻辑解耦

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它提供了评估语言的语法或表达式的方式。该模式通过定义一个语言的文法表示&#xff0c;并通过解释这些表示来执行相应的操作。 解释器模式主要用于设计一种特定类型的计算机语言或表达式…

JVM面试问题集

什么是JVM? 了解过字节码文件的组成吗? 说一下运行时数据区 哪些区域会出现内存溢出&#xff0c;会有什么现象? JM在JDK6-8之间在内存区域上有什么不同 类的生命周期 什么是类加载器 什么是双亲委派机制 打破双亲委派机制 Tomcat的自定义类加载器

51单片机——数码管

一、数码管原理图 我们发现&#xff0c;总共有8个数码管。 它们的上面接8个LED&#xff0c;用来控制选择哪个数码管。例如要控制第三个数码管&#xff0c;就让LED6为0&#xff0c;其他为1&#xff0c;那LED又接到哪呢&#xff1f; 二、LED 由图可以看出&#xff0c;这个一个1…

Linux之实战命令04:rename应用实例(三十八)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

中国雕塑—孙溟㠭凿刻印《自然贼》

中国雕塑孙溟㠭凿刻作品《自然贼》 孙溟㠭凿刻印《自然贼》 遵循自然之法谓之道&#xff0c;脱离自然之道谓之贼&#xff0c;道法自然。丙申秋月溟展刊。 孙溟㠭凿刻印《自然贼》 这方《自然贼》&#xff0c;红木章料&#xff0c;半尺见方&#xff0c;自然古朴&#xff0c;浑…

浪涌抑制-功率NTC选型计算

目录&#xff1a; 一、概述 二、NTC抑制浪涌原理 三、功率NTC的介绍 四、功率NTC选型原则 1、峰值正向浪涌电流 2、阻值选取 3、正常工作的计算 一、概述 NTC热敏电阻除用于温度测量(热敏电阻温度检测-分段曲线拟合、Steinhart-Hart与查表)外&#xff0c;在电源中常用于…

轻量级流密码算法Trivium

轻量级流密码算法Trivium 0x0 Trivium算法简介 Trivium算法是由C&#xff0e;D Canniere和B&#xff0e;Preneel共同设计的一套对称加密算法&#xff0c;Trivium密码算法采用了分组密码和非线性反馈移位寄存器的设计思路。该密码算法总共288比特的内部状态&#xff0c;其中有…

力扣最热一百题——最长公共前缀

目录 题目链接&#xff1a;14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;逐步缩减前缀 Java写法&#xff1a; 运行时间 C写法&#xff1a; 运行时间 时间复杂度和空间复杂度 解法二&#xff1a;字典…

国人卖家可折叠无线充电器发起TRO专利维权,功能相同可能侵权

案件基本情况&#xff1a;起诉时间&#xff1a;2024-8-5案件号&#xff1a;2024-cv-22971原告&#xff1a;SHANGXING TECHNOLOG (SHENZHEN) CO., LTD原告律所&#xff1a;Rubio & Associates, P.A.起诉地&#xff1a;佛罗里达州南部法院涉案商标/版权&#xff1a;原告品牌简…

Tomcat后台弱口令部署war包

1.环境搭建 cd /vulhub/tomcat/tomcat8 docker-compose up -d 一键启动容器 2.访问靶场 点击Manager App tomcat8的默认用户名和密码都是tomcat进行登录 3.制作war包 先写一个js的一句话木马 然后压缩成zip压缩包 最后修改后缀名为war 4.在网站后台上传war文件 上传war文件…

本地提权【笔记总结】

文章目录 服务命令at命令提权介绍适用版本复现 sc命令提权介绍适用版本复现 ps应用程序提权复现 进程注入进程迁移注入介绍条件复现 MSF自动化注入介绍getsystem原理 复现 MSF令牌窃取介绍复现 烂土豆提权介绍适用版本复现 UAC绕过介绍复现使用ask模块绕过使用bypassuac_sluihi…

NLP 主流应用方向

主流应用 文本分类文本匹配序列标注生成式任务 应用细分 文本纠错话者分离 本质为文本分类任务数字归一化 实现数字映射&#xff0c;提高内容可读性 如将一九九九转1999

乱弹篇(53)丹桂未飘香

今天是2024年“秋分”节气&#xff0c;也是第7个中国“农民丰收节”&#xff0c;本“人民体验官”推广人民日报官方微博文化产品《文化中国行看丰收之美》。 截图&#xff1a;来源“人民体验官”推广平台 人民微博说&#xff1a;“春华秋实&#xff0c;岁物丰成。”又说&#…