从二叉树到2-3-4树再到红黑树

直接进入正题:

一、如何从数组生成一个二叉树

假设数组为:{ 30, 13, 7, 43, 23, 12, 9, 33, 42, 21, 18, 6, 3, 50 },我们不对数组排序,直接生成二叉树。

创建流程:

1.将第一数作为根节点:

2.插入13,13小于30,放在30的左边子节点。

3.插入7,7小于30,7小于13,放在13的左边子节点。

4.插入43,43大于30,放在30的右边子节点。

5.放入23,23小于30,23大于13,放入13的右边子节点。

6.放入12,12小于30,12小于13,12大于7,放入7的右边子节点。

7.放入9,9小于30,9小于13,9大于7,9小于12,放入12的左边子节点。

8.中间省略,最后生成的二叉树为如下:

9.由上图可以看出,普通二叉树是不平衡的,最坏的情况可能会形成以下情况:

在这种情况下,当我们需要查找1的时候,时间复杂度就是O(n)。

普通二叉树的查找时间复杂度为[O(log2n),O(n)]之间。如果让其始终保持为O(log2n)的时间复杂度呢,我们就要创建平衡二叉树。

2-3树和红黑树都是平衡二叉树,我们先看2-3树,然后再由2-3树引出红黑树的原理。

二、平衡二叉树 2-3树

2-3树的意思就是,某个节点有两种可能:

一是正常的2-节点,包含一个值(或键),包含左右两个子节点。二是3-节点,包含两个值,包含左中右三个子节点。

如图所示:

左边为2-节点,右边为3-节点。

向一个2-3树的节点中插入一个新的元素有以下几种基础操作:

1.插入一个比2-节点值小的元素,例如对值为30的2-节点插入20:

2.插入一个比2-节点值大的元素,例如对值为30的2-节点插入40:

3.插入一个比3-节点左边值更小的值,例如对值为20 30的3-节点插入15:

注意,这里对3-节点插入数据后,形成了一个4-节点,可以分解为最右边的二叉子树。

4.插入一个比3-节点左边值更大、比右边值更小的值,例如对值为20 30的3-节点插入25:

5.插入一个比3-节点右边值更大的值,例如对值为20 30的3-节点插入40:

6.当下面一层的元素形成了4-节点,将4-节点的中间数往上层升级(分左右方向):

有了上述6个基本操作,我们开始使用前面的数组来创建2-3树:

数组为{ 30, 13, 7, 43, 23, 12, 9, 33, 42, 21, 18, 6, 3, 50 }。

创建流程:

1.将30作为根节点。

2.插入13,13比30小,形成一个值为13 30的3-节点。

3.插入7,7比13小,形成一个值为7 13 30的4-节点,然后分解。

4.插入43,43大于13,43大于30,与30一起形成3-节点。

5.插入23,23大于13,23小于30,与30 43形成4-节点,然后分解。

6.插入12,12小于13,12大于7,与7组成3-节点

7.插入9,9小于13,9大于7,9小于12,与7 12组成4-节点,然后分解。分解后9升级到上一层,与13 30形成4-节点,再次分解。

8.插入33,33大于13,33大于30,33小于43,与43组成3-节点。

9.插入42,42大于13,42大于30,42大于33,42小于43,与33 43形成4-节点,然后分解。

10.省略后面过程,最终生成结果为:

至此,我们创建了一颗2-3树,可以看出2-3树的平衡性还是很好的。

得到2-3树以后,我们可以将其进行结构上的一些变化:

1.将其中的所有3-节点,变换为以下形状,以左边子树为例:

2.将所有的3-节点进行变换:

3.得到的就是一颗红黑树,所以2-3树和红黑树是可以一一对应的,但是需满足三个条件

  • 红链接均为左链接。
  • 没有任何一个节点同时和两条红链接相连。
  • 任意空链接到根节点路径上的黑色连接数目相同。

从图中可以看出,我们的红连接都是左链接,满足条件一。没有节点同时链接两条红线,满足条件二。每个叶子节点下得空链接到根节点30的路径中黑连接数量都是2,所以满足条件三。

三、红黑树

原文地址:https://www.cnblogs.com/leokale-zz/p/11123482.html

时间: 2024-10-11 00:11:39

从二叉树到2-3-4树再到红黑树的相关文章

从2-3-4树模型到红黑树实现

目录 从2-3-4树模型到红黑树实现 前言 2-3-4树 查找 插入 树的生长 删除 左倾红黑树 查找 插入 删除 总结 参考文献 从2-3-4树模型到红黑树实现 前言 红黑树,是一个高效的二叉查找树.其定义特性保证了树的路径长度在黑色节点上完美平衡,使得其查找效率接近于完美平衡的二叉树. 但是红黑树的实现逻辑很复杂,各种旋转,颜色变化,直接针对其分析,大多数都是死记硬背各种例子,不太容易有个直观的理解.实际上,红黑树是实现手段,是其他概念模型为了方便在二叉树上实现进而定义的节点颜色这个信息.如

从二叉排序树到平衡二叉树再到红黑树系列3

这篇博客主要讲解B树及其插入删除操作,并给出操作的流程图以达到清晰易懂的目的,尽管标题是从二叉排序树到平衡二叉树再到红黑树系列3,没有B树二字,但他们都是动态查找树,所以我将他们归为一个系列. B树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡搜索树.它以一种很自然的方式推广了二叉搜索树,B树与红黑树的不同之处在于B树结点的孩子不限于最多为2,而是可以有数个到数千个不定.因为结点的分支更多,因而相比红黑树,高度更小. B树的定义有如下两种,但殊途同归. 定义形式一(以度 t 定义): 一棵

3、如何判断一棵树是否是红黑树?

一.红黑树的定义 红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色.除了二叉查找树强制的一般要求以外,对于任何有效的红黑树有如下的额外要求: 性质1. 节点是红色或黑色. 性质2. 根节点是黑色. 性质3 每个叶节点(NIL节点,空节点)是黑色的. 性质4 每个红色节点的两个子节点都是黑色.(从每个叶子到根的所有路径上不能有两个连续的红色节点) 性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点. 二.如何判断是否是红黑树(假设正数代表黑色,负数代表红色) 1.中序遍

B-Tree 漫谈 (从二叉树到二叉搜索树到平衡树到红黑树到B树到B+树到B*树)

关于B树的学习还是需要做点笔记. B树是为磁盘或者其他直接存取辅助存储设备而设计的一种平衡查找树.B树与红黑树的不同在于,B树可以有很多子女,从几个到几千个.比如一个分支因子为1001,高度为2的B树,他可以存储超过10亿个关键字,尽管如此,因为根节点(只有一个)保留在主存中,故这可书中,寻找某一个关键字之多需要两次磁盘存取. 关于磁盘的结构,以及写入,读取数据的原理,这里就略过了. 一.概述: 1) 对于B树的每个节点x有: a)n[x],当前存储在结点x中的关键字数, b)关键字以非降序存放

从二叉排序树到平衡二叉树再到红黑树系列1

最近想写一些关于红黑树的博客,既想写的全面,又直观,但是又不知道从哪里入手.斟酌再三,还是从最简单的二叉排序树开始写. 二叉排序树(Binary Sort Tree)又叫二叉查找树.它是一种特殊结构的二叉树.其或为空树,或具备下列性质: (1)若它的左子树不为空,则左子树上所有结点的值均小于它的根节点的值. (2)若它的右子树不为空,则左子树上所有结点的值均大于它的根节点的值. 显然,它的中序遍历就是一个递增的有序序列. 定理:在一棵高度为h的二叉搜索树上,动态集合上的操作serach,minm

从二叉排序树到平衡二叉树再到红黑树系列2

上篇博客主要讲述了二叉排序树的基本概念和插入删除操作,必须再次说明的是:在一棵高度为h的二叉排序树上,实现动态集合操作查询,插入和删除的运行时间均为O(h). 可见二叉树的基本操作效率取决于树的形态,当然树的高度越低越好,显然树分布越均匀,高度越低.那么,问题来了?对于给定的关键字序列,如何构造一棵形态匀称的二叉排序树.这种匀称的二叉排序树就称为平衡二叉树. 平衡二叉树定义:平衡二叉树或为空树,或其上任意一个节点,节点的左右子树高度差不超过1.     通常将二叉树上所有结点的左右子树的高度之差

树-二叉查找树、红黑树

二叉查找树的性质: 如果节点的左子树不空,则左子树上所有结点的值均小于等于它的根结点的值: 如果节点的右子树不空,则右子树上所有结点的值均大于等于它的根结点的值: 任意节点的左.右子树也分别为二叉查找树: 二叉查找树查找某个结点时,是二分查找的思想,查找所需的最大次数等同于二叉树的高度. 缺陷:二叉查找树多次插入新节点时,有可能导致二叉查找树的不平衡,变成线性结构. 二叉查找树的优化=> 红黑树 1.节点是红色或黑色. 2.根节点是黑色. 3.所有叶子都是黑色(叶子是NIL节点). 4.每个红色

再论红黑树

红黑树: 红黑树(Red Black Tree) 是一种自平衡二叉查找树 : l 每个节点或者是黑色,或者是红色. l 根节点是黑色. l 每个叶子节点是黑色. l 如果一个节点是红色的,则它的子节点必须是黑色的. l 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点. 红黑树的各种操作的时间复杂度是O(log2N). 红黑树 vs AVL 红黑树的查询性能略微逊色于AVL树,因为他比avl树会稍微不平衡最多一层,也就是说红黑树的查询性能只比相同内容的avl树最多多一次比较,但是,红

红黑树一:从二叉树、2-3树到红黑树,一步步讲解红黑树的来源

目录 1 引言 2 从二叉查找树到红黑树的演变 2.1 二叉查找树 2.2 平衡二叉查找树 2.3 2-3树 2.4 红黑树 1 引言 RB-Tree,即红黑树,它的定义如下: 这是一颗二叉树,且每个节点要么是红色.要么是黑色 根节点是黑色 叶子节点也是黑色的,且叶子节点不存储数据,即叶子节点是nil空节点 不能出现连续的红色节点,即相邻的红色节点必须被黑色节点隔开 任何一个节点到达其任意一个叶子节点均包含相同数目的黑色节点 单看上面的定义,大家肯定跟我一样一头雾水,别急,下面我们从最简单的二叉