Java数据结构和算法(八)--红黑树与2-3树

红黑树规则:

  1、根节点与叶节点都是黑色节点

  2、每个红色节点的两个子节点都是黑色节点,反之,不做要求,换句话说就是不能有连续两个红色节点

  3、从根节点到所有叶子节点上的黑色节点数量是相同的

一般对红黑树的讲述都是先给出这样的定义,这样想对不太容易理解的,而在算法4一书中,直接跳过这些规则,而讲述了红黑树与2-3树的等价性

如果我们先了解2-3树,理解了红黑树与2-3树之间的关系,回过头就会发现红黑树不难

2-3树:

2-3树满足二分搜索树的基本性质,但是不是二叉树

2-3树节点可以存放一个元素或两个元素,每个节点有两个(2节点)或三个子节点(3节点),这就是2-3树

2-3树是一个绝对平衡的树

2-3树的绝对平衡性:

1、2-3树新插入的节点一定不能插到空节点的位置

2、如果一个新节点插入到2节点,就会形成3节点

3、如果一个心机诶单插入到3节点,临时形成4节点,然后进行变形

如果这个节点是根节点,这样就处理完了,如果插入的节点是叶子节点

1).父节点为2-节点

2).父节点为3-节点

通过上面的规则,实现了2-3树的绝对平衡

红黑树和2-3树的等价性:

将2节点与3节点类比到红黑树

通过上面的过程,我们得到红黑树,所有红色节点都是左倾斜

实践:

  所以此时我们很容易就能把2-3树转换为红黑树

原来的2-3树有三个3-节点,所以红黑树中就有三个红色节点

原文地址:https://www.cnblogs.com/huigelaile/p/11106466.html

时间: 2024-08-26 17:59:30

Java数据结构和算法(八)--红黑树与2-3树的相关文章

研磨数据结构与算法-14红黑树

红黑树: public class RBTree { private final Node NIL = new Node(null,null,null,Color.BLACK,-1); private Node root; public RBTree() { root = NIL; } public RBTree(Node  root) { this.root = root; } //插入节点 public void rbInsert(Node node) { Node previous = N

数据结构与算法简记--红黑树

红黑树 平衡二叉树 定义:二叉树中任意一个节点的左右子树的高度相差不能大于 1. 完全二叉树.满二叉树其实都是平衡二叉树,非完全二叉树也有可能是平衡二叉树. 平衡二叉查找树 任何节点的左右子树高度相差不超过 1,是一种高度平衡的二叉查找树. 符合二叉查找树的特点:左子节点小于父节点,右子节点大于父节点. 发明的初衷是:解决普通二叉查找树在频繁的插入.删除等动态更新的情况下,出现时间复杂度退化的问题. “平衡”的意思,其实就是让整棵树左右看起来比较“对称”.比较“平衡”,不要出现左子树很高.右子树

浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B

java数据结构和算法06(红黑树)

这一篇我们来看看红黑树,首先说一下我啃红黑树的一点想法,刚开始的时候比较蒙,what?这到底是什么鬼啊?还有这种操作?有好久的时间我都缓不过来,直到我玩了两把王者之后回头一看,好像有点儿意思,所以有的时候碰到一个问题困扰了很久可以先让自己的头脑放松一下,哈哈! 不瞎扯咳,开始今天的正题: 前提:看红黑树之前一定要先会搜索二叉树 1.红黑树的概念 红黑树到底是个什么鬼呢?我最开始也在想这个问题,你说前面的搜索二叉树多牛,各种操作效率也不错,用起来很爽啊,为什么突然又冒出来了红黑树啊? 确实,搜索二

Java - HashTree源码解析 + 红黑树

Java提高篇(二七)-----TreeMap TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致还是叫做TreeMap比较好.通过这篇博文你可以获得如下知识点: 1.红黑树的基本概念. 2.红黑树增加节点.删除节点的实现过程. 3.红黑树左旋转.右旋转的复杂过程. 4.Java 中TreeMap是如何通过put.deleteEntry两个来实现红

Java数据结构与算法(第一章综述)

数据结构和算法能起到什么作用? 数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排.数据结果包括数组.链表.栈.二叉树.哈希表等等.算法对这些结构中的数据进行各种处理,例如,查找一条特殊的数据项或对数据进行排序. 可用于下面三类情况: 现实数据存储 程序员的工具 建模 数据结构的特性: 数据结构 优点 缺点 数组 插入快,如果知道下标,可以非常快地存取 查找慢,删除慢,大小固定 有序数组 比无序的数组查找快 删除和插入慢,大小固定 栈 提供后进先出的方式存取 存取其他项很慢 队列 提供先

java数据结构与算法之平衡二叉树(AVL树)的设计与实现

[版权申明]未经博主同意,不允许转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53892797 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈(Stack)设

算法:红黑树

算法:红黑树 红黑树介绍 红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组.它是在1972年由鲁道夫·贝尔发明的,他称之为"对称二叉B树",它现代的名字是在Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文中获得的. 红黑树本质上是一种二叉查找树,但它在二叉查找树的基础上额外添加了一个标记(颜色),同时具有一定的规则.这些规则使红黑树保证了一种平衡,插入.删除.查找的最坏时

Java数据结构和算法(一):综述

数据结构和算法能起到什么作用? 数据结构是指数据在计算机内存空间或磁盘中的组织形式.数据结构包括数组.链表.栈.二叉树.哈希表等等.算法对这些结构中的数据进行各种处理,例如,查找一条特殊的数据项或对数据进行排序. 数据结构的概述 数据结构 优点 缺点 数组 插入快,如果知道下标,可以非常快地存取 查找慢,删除慢,大小固定 有序数组 比无序数组查找快 删除和插入慢,大小固定 栈 提供后进先出方式的存取 存取其他项很慢 队列 提供先进先出方式的存取 存取其他项很慢 链表 插入快,删除快 查找慢 二叉