【校招VIP】java数据结构——红黑树简介

4小时前 收藏 0 评论 0 java开发

【校招VIP】java数据结构——红黑树简介

转载声明:文章来源https://blog.csdn.net/qq_51383106/article/details/123951116 

一、首先先来了解什么是2-3-4树

1.简介

2-3-4属于一种多路查找树,是一种四阶的B树,它的结果有以下特点

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

节点只能是2-节点、3-节点、4-节点节点

元素的排序整体上保持二叉查找树的特性,即父节点大于左子节点,小于右子节点;当节点有多个元素时,每个元素都必须大于他左边的和他的左子树中的元素。

2.三种节点的示意图

①:2-节点:有两个子树的节点

②:3-节点:有三个子树的节点

③:4-节点:有四颗子树的节点

3.构建一颗2-3-4树

2-3-4树中结点添加需要遵守以下规则:

插入都是向最下面一层插入

升元:将插入结点由 2-结点升级成 3-结点,或由 3-结点升级成 4-结点

升层:向 4-结点插入元素后,需要将中间元素提到父结点升元,原结点变成两个 2-结点,再把元素插入 2-结点中,如果父结点也是4-结点,则递归向上层升元,至到根结点后将树高加1;

将1 2 3 4 5 6 7 8 9 10 11 12 构建成一个2-3-4树


由于我们是从下到上进行构建的,所以我们能够保证所有叶子节点都拥有相同的深度

二、红黑树

1.认识红黑树的特性

1.每个节点不是红色就是黑色

2.根节点是黑色

3.每个叶子节点(NIL节点,空节点)是黑色的

4.如果一个节点是红色的,则他的子节点必须是黑色的

5.从一个节点到该节点的所有子孙节点的所有路径上包含相同数目的黑色节点

特殊说明:我们每次新插入的节点都是红色

将插入的节点写为红色,就不会违背特性5,少违背一条特性,也就意味着我们需要处理的情况也就越少。

2.从2-3-4树到红黑树

2-3-4树的查询操作像普通的二叉搜索树一样,非常简单,但由于其结点元素数不确定,在一些编程语言中实现起来并不方便,实现一般使用它的等同——红黑树。

至于为什么说红黑树是 2-3-4树的一种等同呢,这是因为 2-3-4树的每一个结点都对应红黑树的一种结构,所以每一棵 2-3-4树也都对应一棵红黑树,下图是 2-3-4树不同结点与红黑树子树的对应。

3.通过2-3-4树构建红黑树

新插入的结点颜色为红色,这样才可能不会对红黑树的高度产生影响。

2-结点对应红黑树中的单个黑色结点,插入时直接成功(对应 2-结点升元)。

3-结点对应红黑树中的黑+红子树,插入后将其修复成 红+黑+红 子树(对应 3-结点升元);

4-结点对应红黑树中的红+黑+红子树,插入后将其修复成红色祖父+黑色父叔+红色孩子子树,然后再把祖父结点当成新插入的红色结点递归向上层修复,直至修复成功或遇到 root 结点;

如上图所示,虽然向红黑树中插入了一个新结点,但由于旋转和变色,子树的高度保持不变。

C 0条回复 评论

帖子还没人回复快来抢沙发