二叉树、红黑树、B树、B+树

news2025/1/13 14:23:06

二叉树

一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。
二叉树的特点

  1. 每个结点最多有两棵子树,即二叉树不存在度大于2的结点。
  2. 二叉树的子树有左右之分,其子树的次序不能颠倒。

满二叉树

满二叉树:二叉树的所有叶子节点都在最后一层且总数n=2^(n-1)。

完全二叉树

完全二叉树:数据从上到下,从左到右依次进行平铺。

有序二叉树

有序二叉树:左子树上的值小于根节点的值,右子树上的值大于根节点的值。

有序二叉树的遍历:

深度优先遍历:

1、先序/前序遍历:根节点----》左子树-----》右子树

2、中序遍历:左子树----》根节点-----》右子树

3、后序遍历:左子树----》右子树-----》根节点

有序二叉树不稳定:O(logn) - O(n)

有序二叉树不稳定是因为没有任何限制,以至于在某些特殊的情况下会形成链表。

平衡二叉树

平衡二叉树是在有序二叉树的基础之上而来的,就是为了解决有序二叉树不稳定的问题。要求:一个节点的左右子树高度差的绝对值不能超过1,可以等于1。

如果插入的数据之后使得一个节点的左右子树高度差的绝对值超过了1,就要通过LL、RR、LR、RL四种旋转策略来保证平衡二叉树。

四种旋转策略

LL旋转策略:

实例:

RR旋转策略:

实例:

LR旋转策略:

实例:

RL旋转策略:

实例:

在实行旋转策略是,选择距离造成不平衡节点最近的不平衡节点作为要操作节点。

平衡二叉树特别稳定,但每次进行调整都会耗费计算机性能。

我们想既要时间复杂度在O(logn),又要十分稳定,还要不耗费计算机性能,这时,推出了红黑树。

红黑树(基于2-3-4树)

2-3-4树是从下向上构建的。节点内升序,每个节点最多有3个值,当插入第4个值时,需要在这四个之中选中间值进行升元。

实例:

然后通过2-3-4树转换 形成红黑树

转换规则如下图:

将刚刚的2-3-4树转换为红黑树:

红黑树的特点:

1、红黑树中每一个节点不是红色节点就是黑色节点。

2、红黑树当中根节点一定是黑色的。———>在转化的过程中2-3-4节点都是以黑色节点开头的

3、每一个叶子节点都是黑色的。

4、从根节点到任意一个叶子节点的路径上所走过的黑色节点的数量相同

5、如果一个节点是红色的,那么他的子节点一定是黑色

4、5条特点会导致最长的路径绝对不会超过最短路径的2倍。例如最长路径为黑红黑红黑红,最短路径为黑黑黑。

为什么红黑树是O(logn)?

2-3-4树是多叉树,如果数据相等,它的时间复杂度小于传统二叉树,2-3-4树的时间复杂度

红黑树最复杂的时候也就是变为2倍,变为2logn。这是依旧可以看成是logn。

B树

多叉树以B树为最基本点。2-3-4树来源于B树。

B树特点:

1、B树的数据存储是 key-value类型的。

2、B树有几个叉:并不确定,要看具体实现。

3、M阶B树

        3.1、每个节点上最多有 M-1 个值,并且以升序排列。3阶B树每个节点最多有两个值。.....(2-3-4树属于4阶B树)

红黑树和B树如果都在内存中,内存向cpu提供数据的时间相等,由于红黑树对比次数相对较少,所以红黑树是内存最优二叉树。

为什么要有B树:

红黑树和B树如果都在磁盘中--------》数据寻址浪费时间--------》磁头移动的物理时间+平均盘面旋转半圈

B树多用于磁盘,原因是分出多个叉,降低树的高度,降低寻址次数和时间。

B树优胜于寻址,但是数据进行对比还是要在内存中。

B+树

在B树基础上改造出现的B+树,但和传统B树又不太一样。B+树是mysql数据库专用底层数据结构。

B+树的特点:

1、非叶子节点仅具有索引功能,也就是说非叶子节点只能存储key值,不能存储value值。

2、B+树的所有叶子节点会构成一个有序的链表,这样就可以根据key值遍历数据。

之所以有这两个特点就是为数据库的功能服务

B+树的构建

插入 3 ,4

磁盘向cpu推送数据:每次需要推送一页(4kb)的数据,如两个文件 2kb+3kb,只能先推送2kb,再推送3kb。

B+树的优点:

1、非叶子节点不包含数据,只能放索引,这样每次就可以向内存当中传输更多的key值,在内存当中进行数据比对,在磁盘当中进行数据查询。

2、叶子节点是链接在一起的,这样有利于区间查询。

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

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

相关文章

【算法刷题之哈希表(2)】

目录 1.leetcode-454. 四数相加 II2.leetcode-383. 赎金信(1)暴力解法(2)哈希法 3.leetcode-205. 同构字符串(1)哈希法(2)直接对比查找 4.leetcode-128. 最长连续序列5.总结 1.leetc…

抖音小程序商城开发制作源码 含多套模板+部署搭建教程

分享一个抖音小程序商城的制作源码,含多套模板、模块化自由DIY功能和完整的搭建部署教程。程序支持除抖音小程序商城制作外,还支持一键同步微信、支付宝、百度、今日头条端小程序。 抖音小程序商城的基本架构包括前端页面和后端管理平台两部分。前端页面…

【FPGA】FPGA入门 —— 基本开发流程

FPGA入门 1. FPGA入门2. FPGA开发流程3. 二选一多路器 - 快速熟悉开发环境及流程 1. FPGA入门 快速上手verilog语法状态机,线性序列机FPGA常见的设计方法自己写代码,下载代码进行使用,使用厂家/第三方提供的IP核常见接口设计 等等。。 学习…

白介素对NK细胞功能的影响(IL-1β、IL-12、IL-15、IL-18、IL-21)

1、促进NK细胞扩增和活化:IL-2/21 Soiffer RJ等自1996年起即报道IL-2低剂量持续输注和间歇给药对转移癌患者的CD56NK细胞有明显扩增效果。大部分NK细胞表面具有IL-2中亲和性受体,IL-2诱导NK的杀伤活性约需18~24小时。此外,IL-2还…

Docker安装Jenkins实操记录

前置条件: 1、安装了docker 2、安装了java(没有安装情况下,可运行:yum install -y java-1.8.0-openjdk-devel.x86_64) 一、拉取镜像 1、docker pull jenkins/jenkins 2、mkdir -p /usr/local/jenkins 3、chmod 777 …

模型崩溃,ChatGPT变“笨”了?最新评估结果揭示真相原因

​ChatGPT性能是否变化? 人们可能会好奇,像ChatGPT这样的AI系统是否会因为太聪明而最终无法被人类所驾驭使用。但是,最近的一项研究表明,ChatGPT正在变得越来越糟糕。[1] OpenAI的ChatGPT帮助了无数人更高效地使用互联网。无论是…

php 多维数组排序,根据某一列排序(array_multisort()和array_column()联用)

array_multisort()和array_column()联用效果直接叠满,11>100 先来看下两个函数的介绍和用法 array_column(): 一般模式,不需要其中字段作为id,只需要提取val值 <?php // 可能从数据库中返回数组 $a [[id > 5698, first_name > Peter, last_name > G…

【AndroidStudio】屏蔽小米打印

使用小米手机调试时&#xff0c;会一直有notifyQueue load error的打印 在过滤器重添加过滤条件即可 -message:notifyQueue

ISO-16750-1,2,3,4,5_2023 道路车辆 — 电气和电子设备的环境条件和测试 ,标准汇总

目录 一、ISO 16750标准各Part部分当前状态&#xff1a; ISO 16750-2023 合集1-5包下载&#xff1a;https://download.csdn.net/download/std7879/88251235 二、ISO 16750标准各Part部分描述的内容&#xff1a; ISO 16750-1:2023Part 1: General概述 ISO 16750-2:2023 Part…

8路模拟信号采集FMC子卡模块推荐哪些?

FMC168是一款基于VITA57.4标准的2GSPS/2.6GSPS/3GSPS采样率14位分辨率Double FMC子卡模块&#xff0c;该模块可以实现8路14-bit、2GSPS/2.6GSPS/3GSPS采样率模拟信号采集。该板卡ADC器件采用ADI公司的AD9208芯片,该芯片与AD9689完全兼容&#xff0c;可以实现不同的采样率范围。…

微信小程序客服系统-两种形式:嵌入页面传递更多信息 与 自带组件形式

微信小程序对接有两种方式&#xff1a;webview组件嵌入页面&#xff0c;小程序客服组件对接消息 使用webview组件嵌入聊天页面形式。这种形式更加的灵活可控&#xff0c;可以传递更多的信息给到客服&#xff0c;例如可以把用户的手机号&#xff0c;所在页面的产品信息等带入进来…

Dubbo3之SerializingExecutor

前言 Dubbo3 提供了一个挺有意思的 Executor&#xff0c;用来将提交到线程池里的任务按顺序串行执行。 需求背景&#xff1a;你有一个线程池&#xff0c;但是你不想修改它&#xff0c;现在你的需求是要把提交上去的任务按顺序串行执行。 在这样一个需求背景下&#xff0c;Ser…

Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL

摘要 本文主要介绍了IRNet论文的基本信息&#xff0c;比如标题、摘要、数据集、结果&结论&#xff0c;以及论文中提出的不匹配问题和词汇问题以及对应的解决方案&#xff0c;重点学习了中间表示SemQL。 引言 学习论文时&#xff0c;可以先粗略看看论文标题-摘要-数据集-结…

YB2411是一款内部集成有高边高压功率MOSFET管的高频率(2MHz)降压型开关稳压器。

概述&#xff1a; YB2411是一款内部集成有高边高压功率MOSFET管的高频率(2MHz)降压型开 关稳压器。提供单路最大0.6A高效率输出&#xff0c;以电流模式控制方式达到快速环路响 应。 宽范围输入电压(33V至36V)可在移动环境输入的条件下实现各种降压型电 源变换的应用。1uA的…

为什么产品经理不适合做项目经理呢?

虽然产品经理需要具备一定的项目能力&#xff0c;但在实际执行过程中&#xff0c;通常会在开发团队中设置一个类似项目经理的角色&#xff0c;负责把控项目进度和质量。一般情况下&#xff0c;技术经理就是项目经理。 技术型项目经理的特点如下&#xff1a; 充当救火队员的角…

C#矩阵XY排序

矩阵XY快速排序 using MyVision.Script.Method;public class MyScript : ScriptMethods {//struct MOTIONPOSXY_S{public double Pos_x;public double Pos_y;};//脚本执行该方法public bool Process(){//try{//脚本代码写在下方 List<double> PointX GetDoubleList(&qu…

会员管理系统实战开发教程03-会员管理功能

我们上篇介绍了会员管理的列表页&#xff0c;及新增功能开发。本篇我们继续我们的会员管理功能&#xff0c;介绍一下详情、修改、删除功能。 1 创建详情页 打开控制台&#xff0c;点击创建页面的图标&#xff0c;创建详情页 2 数据详情组件 详情页我们也是使用数据容器组…

RTSP/Onvif视频服务器EasyNVR视频平台微信端出现播放失败的问题解决方案

EasyNVR是基于RTSP/Onvif协议接入的视频平台&#xff0c;具备视频直播监控、录像、检索与回看、存储、国标级联等视频能力&#xff0c;可支持将接入的视频流进行全平台、全终端的分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等。 有用户反馈&#xff0c;在…

shopee平台好做吗,有什么优势?

shopee平台提供了一个庞大而活跃的用户群体。作为东南亚地区最受欢迎的购物平台之一&#xff0c;shopee平台吸引了数百万用户每天在该平台上进行交易。这意味着商家可以通过shopee平台获得更大范围和更广泛的曝光机会。无论是刚创业还是已经有一定规模和知名度的企业&#xff0…

最简单的Obsidian图床配置

参考文章&#xff1a; Obsidian 将图片批量上传至图床 Obsidian中图床自动上传设置 前言 配置图床的目的&#xff1a;解决 Obsidian 图片存储问题&#xff0c;一般来说 Obsidian 图片是以本地链接的方式存储在文章当中&#xff0c;当图片移动的时候文章中的图片就会出错。 …