二叉树、红黑树 详解
一、二叉树
1.1 树的基本定义
树的特点:
- 每个节点有零个或多个子节点
- 没有父节点的节点为根节点
- 每个非根节点只有一个父节点
- 每个节点及其后代节点整体上可以看做是一颗树,称为当前节点的父节点的一个子树;
1.2二叉树的基本定义
二叉树:
二叉树就是度不超过2的树(每个节点最多有两个子节点)
满二叉树:
一个二叉树,如果每一个层的节点树都达到最大值,则这个二叉树就是满二叉树。
每一层节点个数为:2的k次方-1;k为层数;
完全二叉树:
叶节点只能出现在最下层和次下层,并且最下面一层的节点都集中在该层最左边的若干位置的二叉树;
二、平衡树
之前我们学习过二叉查找树,发现它的查询效率比单纯的链表和数组的查询效率要高很多,大部分情况下,确实是这样的,但不幸的是,在最坏情况下,二叉查找树的性能还是很糟糕。
我们会发现,如果我们要查找1这个元素,查找的效率依旧会很低。效率低的原因在于这个树并不平衡,全部是向左边分支,如果我们有一种方法,能够不受插入数据的影响,让生成的树都像完全二叉树那样,那么即使在最坏情况下,查找的效率依旧会很好。
2-3查找树定义
2-结点:
含有一个键(及其对应的值)和两条链,左链接指向2-3树中的键都小于该结点,右链接指向的2-3树中的键都大于该结点。.
3-结点:
含有两个键(及其对应的值)和三条链,左链接指向的2-3树中的键都小于该结点,中链接指向的2-3树中的键都位于该结点的两个键之间,右链接指向的2-3树中的键都大于该结点。
查找
将二叉查找树的查找算法一般化我们就能够直接得到2-3树的查找算法。要判断一个键是否在树中,我们先将它和根结点中的键比较。如果它和其中任意一个相等,查找命中;否则我们就根据比较的结果找到指向相应区间的连接,并在其指向的子树中递归地继续查找。如果这个是空链接,查找未命中。
2-3树的性质
通过对2-3树插入操作的分析,我们发现在插入的时候,2-3树需要做一些局部的变换来保持2-3树的平衡。—棵完全平衡的2-3树具有以下性质︰
- 任意空链接到根结点的路径长度都是相等的。
- 4-结点变换为3-结点时,树的高度不会发生变化,只有当根结点是临时的4-结点,分解根结点时,树高+1。
- 2-3树与普通二叉查找树最大的区别在于,普通的二叉查找树是自顶向下生长,而2-3树是自底向上生长。
2-3树的实现
直接实现2-3树比较复杂,因为:
- 需要处理不同的结点类型,非常繁琐;
- 需要多次比较操作来将结点下移;
- 需要上移来拆分4-结点;
- 拆分4-结点的情况有很多种;
2-3查找树实现起来比较复杂,在某些情况插入后的平衡操作可能会使得效率降低。但是2-3查找树作为一种比较重要的概念和思路双于我们后面要讲到的红黑树、B树和B+树非常重要。
三、红黑树
我们前面介绍了2-3树,可以看到2-3树能保证在插入元素之后,树依然保持平衡状态,它的最坏情况下所有子结点都是2-结点,树的高度为lgN,相比于我们普通的二叉查找树,最坏情况下树的高度为N,确实保证了最坏情况下的时间复杂度,但是2-3树实现起来过于复杂,所以我们介绍一种2-3树思想的简单实现∶红黑树。
红黑树主要是对2-3树进行编码,红黑树背后的基本思想是用标准的二叉查找树(完全由2-结点构成)和一些额外的信息(替换3-结点)来表示2-3树。我们将树中的链接分为两种类型∶
二叉树、红黑树 详解相关推荐
- 随处可见的红黑树详解
随处可见的红黑树详解 前言 为什么要有红黑树 二叉搜索树 平衡二叉搜索树 红黑树 红黑树的应用场景 红黑树的性质(重点) 红黑树的定义 红黑树的左旋与右旋 红黑树插入结点与插入维护红黑树的三种情况 插 ...
- 红黑树详解(一)红黑树的介绍和操作
红黑树详解(一)红黑树的介绍和操作 摘要: 在很多源码涉及到大量数据处理的时候,通常都是用红黑树这一数据结构.红黑树是一种自平衡的二叉查找树,它能在进行插入和删除操作时通过特定操作保持二叉查找树的平衡 ...
- 红黑树详解(二)红黑树的插入(附动图和案例)
红黑树详解(二)红黑树的插入(附动图和案例) 摘要: 在很多源码涉及到大量数据处理的时候,通常都是用红黑树这一数据结构.红黑树是一种自平衡的二叉查找树,它能在进行插入和删除操作时通过特定操作保持二叉查 ...
- 《算法导论》红黑树详解(一):概念
在学习红黑树之前,读者应先掌握二叉查找树的相关知识.学习红黑树或者二叉查找树,推荐大家看<算法导论>.<算法导论>原书第3版 高清PDF 带详细书签目录下载 密码:acis & ...
- 红黑树详解及其模板类实现
一.历史 1972年,Rudolf Bayer发明了一种数据结构,这是一种特殊的4阶B树.这些树维护从根到叶的所有路径保持相同数量的节点,从而创建完美平衡的树.但是,它们不是二叉搜索树.Bayer在他 ...
- 红黑树详解,对插入旋转独到理解
一.红黑树的简介 R-B Tree,全称是Red-Black Tree,又称为"红黑树",它一种特殊的二叉查找树.红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑 ...
- “红黑树”详解丨红黑树的应用场景
今天我们要说的红黑树就是就是一棵非严格均衡的二叉树,均衡二叉树又是在二叉搜索树的基础上增加了自动维持平衡的性质,插入.搜索.删除的效率都比较高.红黑树也是实现 TreeMap 存储结构的基石. 文章相 ...
- java红黑树_JAVA学习-红黑树详解
1.定义 红黑树是特殊的二叉查找树,又名R-B树(RED-BLACK-TREE),由于红黑树是特殊的二叉查找树,即红黑树具有了二叉查找树的特性,而且红黑树还具有以下特性: 1.每个节点要么是黑色要么是 ...
- JAVA:红黑树详解
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 本文转载自公众号:乱敲代码 1.定义 红黑树是特殊的二叉查找树,又名R-B树(RED-BLA ...
最新文章
- Hibernate:hbm2ddl.auto =在生产中更新?
- 颜值爆表!这是我目前见过最好看的标签页插件了,强烈推荐!
- GDI+有Bitmap类。
- 2.页面布局示例笔记
- LeetCode 2049. 统计最高分的节点数目(DFS)
- centos7的网卡配置 实用经典总结
- 通过CISA的一些经验分享(原文写于09年)
- (45)FPGA条件编译(选择模块)
- android4.3 Bluetooth分析之扫描分析
- Net::SSH::Perl 包 与 Net::OpenSSH 包的 性能对比代码
- 类型转换和页面获取值(总爱忘的)
- *第四周*数据结构实践项目一【创建单链表】
- 简述this,call,apply,bind之间的关系
- js基础-24-伪数组转化为真数组
- java ee 设计模式解析与应用_《Java EE 设计模式解析与应用》PDF 下载
- 【BZOJ5336】[TJOI2018]party(动态规划)
- 做科研的几点体会:如何多发 SCI
- 2000-2020年上市公司常用指标数据集
- Google Net变种以及注意力机制
- 三层架构(引用自CSDN:http://blo…