二叉查找(排序)树、平衡二叉树、B树、B+树、234树、红黑树_234树与b树区别-程序员宅基地

技术标签: 算法  hashmap  数据结构  b树  

参考:

一、二叉查找(排序)树

1.概念

(1).定义

二叉查找树就是一颗二叉树,他的左节点比父节点要小,右节点比父节点要大,它的高度决定查找效率

(2).特点

  • 二叉排序树中,如果其根结点有左子树,那么左子树上所有结点的值都小于根结点的值;

  • 二叉排序树中,如果其根结点有右子树,那么右子树上所有结点的值都大小根结点的值;

  • 二叉排序树的左右子树也要求都是二叉排序树;

2.BST操作

(1).查找

从根节点开始查找

  • 查找值比当前值大,则搜索右子树

  • 查找值比当前值小,则搜索左子树

  • 查找值等于当前值,停止查找,返回当前节点

(2).插入

要插入节点,则必须先找到插入节点的位置。    

从根节点开始查找:

  • 要插入的值比当前节点的值大,则比较右子树        

  • 要插入的值比当前节点的值小,则比较左子树        

  • 要插入的值和当前节点的值相等,因为二叉查找树不存在两个相同值的节点,所以不执行插入操作。    

直到比较到左右子树为空时,则插入到对应位置。

(3).遍历

  • 前(根)序遍历:根左右        

  • 中(根)序遍历:左根右        

  • 后(根)序遍历:左右根

(4).查找最小值节点

从根节点开始,不断查询当前节点的左子节点,直到最后一个不为空的节点,该节点就是整棵树的最小值节点。

(5).查找最大值节点

从根节点开始,不断查询当前节点的右子节点,直到最后一个不为空的节点,该节点就是整棵树的最大值节点。

(6).查找前驱节点

前驱节点:小于当前节点的最大值节点    

即:        

  • 当前节点有左子树时,其前驱节点就是其左子树中的最大值节点   

  • 当前节点没有左子树,则向上递归到第一次左拐时节点的父节点就是其前驱节点

(7).查找后继节点

后继节点:大于当前节点的最小值节点    

即:        

  • 当前节点有右子树时,其后继节点就是其右子树中的最小值节点

  • 当前节点没有右子树时,则向上递归到第一次右拐时节点的父节点就是其后继节点

(8).删除

删除操作前提:删除要保证删除后,BST树的节点还能保证有序    

删除操作本质:是用被删除节点的前驱节点或者后继节点来替代。        

  • 叶子节点直接删除(叶子节点即没有前驱和后继节点的节点)        

  • 只有一个子节点的节点被删除,就用它的唯一的子节点来代替。(单子节点即只有前驱节点,或者只有后继节点的节点)        

  • 有两个子节点的,需要找到替代节点(双子节点,既有前驱节点,也有后继节点的节点)

二、二叉平衡树

1.概念

(1).定义

BST有一种极端情况,就是全左倾树,或者全右倾树。

(2).特点

AVL树是一个高度自平衡的树,即AVL树的根节点的左右子树的高度差不超过绝对值1。且左右子树本身也是二叉平衡树。另外AVL树具备BST树的全部特性。    

AVL树查询的时间复杂度为O(logN),即每次查询都是二分查找。

2.AVL树的旋转操作

当AVL树中插入新节点时,就可能出现左右子树高度差超过1的情况,此时AVL树就会进行旋转操作,来改变树的结构以保证平衡性,即将左右子树高度差降为1.

(1).左旋

以某个节点作为旋转点,其右子节点变为旋转节点的父节点,右子节点的左子节点变为旋转节点 的右子节点,左子节点保持不变。

(2).右旋

以某个节点作为旋转点,其左子节点变为旋转节点的父节点,左子节点的右子节点变为旋转节点 的左子节点,右子节点保持不变。

三、B树

1、概念

(1)、定义

B树是一种自平衡树数据结构,它维护有序数据并允许以对数时间进行搜索,顺序访问,插入和删除。B树是二叉搜索树的一般化,因为节点可以有两个以上的子节点。与其他自平衡二进制搜索树不同,B树非常适合读取和写入相对较大的数据块(如光盘)的存储系统。它通常用于数据库和文件系统。

(2)、特点

B树是一种平衡的多分树,通常我们说m阶的B树,它必须满足如下条件: 

  • 每个节点最多只有m个子节点。

  • 每个非叶子节点(除了根)具有至少⌈ m/2⌉子节点。

  • 如果根不是叶节点,则根至少有两个子节点。

  • 具有k个子节点的非叶节点包含k -1个键。

  • 所有叶子都出现在同一水平,没有任何信息(高度一致)。

2、B+树

(1)、定义

B+树是B树的一种变形,它把所有的卫星数据都存储在叶节点中,内部节点只存放关键字和孩子指针,因此最大化了内部节点的分支因子,所以B+树的遍历也更加高效(B树需要以中序的方式遍历节点,而B+树只需把所有叶子节点串成链表就可以从头到尾遍历)。

(2)、特点

  • 有m个子树的中间节点包含有m个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引;

  • 所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接。 (而B 树的叶子节点并没有包括全部需要查找的信息);

  • 所有的非终端结点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键字。 (而B 树的非终节点也包含需要查找的有效信息);

(3)、B+树比B树更适合数据库索引的原因

  • B+树的磁盘读写代价更低

  • B+树查询效率更加稳定

  • B+树便于范围查询(最重要的原因,范围查找是数据库的常态)

四、2-3-4树

1.概念

234树是四阶的平衡树(Balance Tree),它属于多路查找树

  • 所有叶子节点都拥有相同的深度

  • 节点只能是2-节点,3-节点,4-节点之一

  • 2-节点:包含一个元素的节点,有两个子节点

  • 3-节点:包含两个元素的节点,有三个子节点

  • 4-节点:包含三个元素的节点,有四个子节点

  • 所有节点至少包含一个元素

  • 元素始终保持排序顺序,整体上保持二叉查找树的特性,节点的元素大于它的左子树所有节点的元素,小于它的右子树所有节点的元素。当节点有多个元素时,每个元素必须大于它左边和它左子树中的元素。

2.2-3-4树和红黑树的等价关系

  • 2-3-4树中2-节点,3-节点,4-节点,虽然各个类型的节点中可以包含多个元素,但是它们本身就只是一个节点,内部的多个元素,会有引用互相关联。

  • 红黑树的节点只能是红色或者黑色,且任意相连的两个节点的颜色不都是红色,即红黑树不存在红红相连,只存在红黑相连,黑黑相连。

  • 红黑树新加入的节点都当成红色节点

  • 红黑树的根节点只能黑色节点

五、红黑树

1.概念

(1).定义

红黑树是一种节点带颜色属性的二叉查找树。

红黑树的每个节点都有存储为表示节点的颜色,只能是红或者黑。

红黑树的平衡是指任意节点到叶子节点的不同简单路径中所拥有的黑色节点个数相同。

即红黑树的平衡是一种黑色平衡。

(2).特性

1.红黑树的每个节点只能是红色或者黑色。(非黑即红)

2.根节点必须是黑色。(黑根)

3.每个叶子节点是黑色的。(叶子节点是Nil)(黑叶)

4.如果某个节点是红色,则它的子节点必须是黑色,不能出现两个红色节点相连的情况。(红红互斥)

5.对于每个节点,从该节点到其后代的叶子节点的简单路径上,均包含相同数目的黑色节点。(黑色平衡)

2.红黑树原子行为

(1).变色

(2).左旋

(3).右旋

未完待续

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41819893/article/details/123010333

智能推荐

Jetson Nano安装Numba_jetson nano numba-程序员宅基地

文章浏览阅读904次。Jetson Nano安装Numba前言安装步骤环境依赖安装AnaConda里安装安装步骤以下是坑 (泪目)不算坑的坑TBB 版本太老LLVM版本太低最后前言近期在Jetson nano上试跑一个姿势估计模型(Pose Estimation Model),后处理时需要用numba。我在nano上安装numba的过程中踩了很多坑…总结一下踩过的坑和解决方式,以及最后成功的安装步骤。刚接触ML和Jetson nano不久,是个小白,如果下面有什么错误请各位大佬多多指教!!QAQ跪谢。安装步骤先直入主题_jetson nano numba

金陵科技学院计算机系男女比,眼已亮瞎:719所全国高校男女比例排名-程序员宅基地

文章浏览阅读1.1k次。学校名称女生比例1 中华女子学院98%2 成都师范学院83%3 四川外国语大学81%4 江苏第二师范学院80%5 西安外国语大学79%6 重庆第二师范学院79%7 牡丹江师范学院78%8 上海外国语大学78%9 大连外国语大学78%10 沈阳医学院77%11 北京第二外国语学院77%12 哈尔滨金融学院77%13 北京语言大学76%14 辽宁师范大学76%15 北京服装学院75%16 川北医学院7...

IOTE2016:透析物联网行业热点 把脉产业链发展趋势-程序员宅基地

文章浏览阅读124次。由国际物联网贸易与应用促进会主办,深圳物联传媒(物联网世界)、易信物联网络联合承办的2016第八届深圳国际物联网与智慧中国博览会(IOTE2016),将于8月18日-20日在深圳会展中心隆重举办。作为国内第一个聚焦物联网全产业链的专业博览会,IOTE2016的展会规模已晋级为亚洲第一,将是物联网产业链人士必来之地。智能——物联网产业迎来新机遇记者...

android simplelistitem1,什么是“android.R.layout.simple_list_item_1”?-程序员宅基地

文章浏览阅读1.3k次。什么是“android.R.layout.simple_list_item_1”?我已经开始学习Android开发了,并且正在遵循一本书中的一个todolist示例:// Create the array list of to do itemsfinal ArrayList todoItems = new ArrayList();// Create the array adapter to bin..._android.r.layout.simple_list_item_1

JPA 学习--Query接口下的 API 测试_接口测试query-程序员宅基地

文章浏览阅读705次。【Query 接口下的常用API】【API 测试类:Test_QueryAPI.Java】[java] view plain copypackage org.zgf.jpa.entity; import java.math.BigInteger; import java.util.Cal_接口测试query

Stuts2入门-程序员宅基地

文章浏览阅读93次。开发工具 Eclipse 3.4 服务器:Tomcat6 Struts版本:2.2.3 JDK:1.6 Struts所有必需的包: commons-fileupload-1.2.2.jarcommons-io-2.0.1.jarcommons-lang-2.5.jarfreemarker-2.3.16.jarjavassist-3.11.0.GA.jar..._

随便推点

【已解决】Git下载私有仓库时报错Authentication failed_for information on currently recommended modes of -程序员宅基地

文章浏览阅读1.1w次,点赞11次,收藏12次。用git下载partner提供的private repo时,提示需要输入username和password。但怎么输入都报Authentication failed 的错误。_for information on currently recommended modes of authentication.

typeorm 修改事务_nest.js + typeORM:身份认证,事务管理-程序员宅基地

文章浏览阅读347次。知识点jwt身份认证md5加密typeorm事务(transaction)的使用本文会延续上一篇文章,继续实现login功能,并实现API的身份认证,查看所有源码。javascriptJWT身份认证对与绝大多数应用程序来讲,身份认证是必不可少的组成部分,而对用户的身份认证受权的策略和方法很是多,选用何种方法取决于项目的需求。htmlpassport是node.js中的一个比较流行的认证库,本项目D..._typeorm 加密

alpine linux_使用Alpine Linux电子邮件客户端从任何网络访问消息-程序员宅基地

文章浏览阅读996次。alpine linux 有时,当我旅行时,无法从通常通过硬线或WiFi连接到我的ISP的设备发送电子邮件。 这是因为某些ISP除非将出站电子邮件通过自己的电子邮件服务器路由,否则它们不希望其出站网络离开网络。 但是您需要在ISP上拥有一个帐户,才能通过其服务器发送出站电子邮件。 故意将电子邮件的出站端口25阻塞通常旨在防止被劫持的主机充当垃圾邮件主机和通过ISP的网络发送电子邮件。 这种情..._alpine安装mail命令

老婆也是程序员,双码农家庭真的快乐吗?-程序员宅基地

文章浏览阅读621次。996、单身汪、挣的多花的少…似乎一直都是码农的标配,那当**夫妻二人都是程序员时,又会擦出什么样的火花呢?**疫情爆发至今已经有一年了,很多双码农家庭两人都得WFH,没了“距离产生美”还能好好过吗?码农网友戏称:矛盾、争执嘛…肯定是有的,不过大多数时候都是技术PK。再高的薪水,也追不上开挂的房价面对日益上涨的房价,收入高如程序员,也会陷入束手无策。尤其是在“宇宙中心”的湾区,疫情不仅没让房价平息,反而涨势更凶!《九章算法班 2021版》扩容5倍课程亮点:疫情应对版《九章算法班 2020版》,令狐冲

Finetuning Large Language Models: Sharon Zhou-程序员宅基地

文章浏览阅读1.2k次,点赞36次,收藏13次。微调大语言模型

Redis 数据库入门教程-程序员宅基地

文章浏览阅读244次。From:http://www.jb51.net/article/56448.htm Redis 菜鸟教程:http://www.runoob.com/redis/redis-tutorial.html Redis 设计与实现:http://redisbook.com/ Redis基础、高级特性与性能调优:https://www.jianshu.c..._redisshujuk 教材

推荐文章

热门文章

相关标签