本文目录 一.为什么要创建红黑树这种数据结构 在上篇我们了解了AVL树,既然已经有了AVL这种平衡的二叉排序树,为什么还要有红黑树呢? AVL树通过定义我们知道要求树中每一个结点的左右子树高度差的绝对值不超过1,其是一颗严格的平衡树,这样构建出来的平衡二叉排序树具有很好的查找性能,但是为了保持其每个结点平衡因子绝对值不超过1的特性在插入或者删除的时候需要的维护成本是很大的,插入或者删除需要大量的平衡度计算,比如上一篇在AVL的插入的时候就需要不断回溯其父节点调整平衡因子的值,数据量小没什么问题,…
红黑树规则: 1.每个节点要么是红色,要么是黑色 2.根节点都是黑色节点 3.每个叶节点是黑色节点 3.每个红色节点的两个子节点都是黑色节点,反之,不做要求,换句话说就是不能有连续两个红色节点 4.从任意节点到所有叶子节点上的黑色节点数量是相同的 一般对红黑树的讲述都是先给出这样的定义,这样想对不太容易理解的,而在算法4一书中,直接跳过这些规则,而讲述了红黑树与2-3树的等价性.如果我们先了解2-3树,理解了红黑树与2-3树之间的关系,再来看这些规则,就容易理解了 2-3树: 2-3树满足二分搜…
目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) Java集合(4)一 红黑树.TreeMap与TreeSet(下) Java集合(5)一 HashMap与HashSet 引言 在系列的第一篇文章中说过Map<K,V>接口与Set<E>接口,Set<E>接口定义了一组不能添加重复元素的集,不能通过索引来访问的集:Map<K,V>接口定义了从…
事先声明以下代码基于JDK1.8版本 参考资料 大部分图片引自https://www.jianshu.com/p/e136ec79235c侵删 https://www.cnblogs.com/skywang12345/p/3245399.html#!comments https://www.cnblogs.com/CarpenterLee/p/5525688.html https://www.cnblogs.com/CarpenterLee/p/5503882.html TreeMap用法 Tr…
目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) Java集合(4)一 红黑树.TreeMap与TreeSet(下) Java集合(5)一 HashMap与HashSet 引言 在Java集合(3)一 红黑树.TreeMap与TreeSet(上)中从二叉树的遍历.添加和删除引申到了红黑树的遍历.添加和删除.对二叉树结构有了一定的了解,在这篇文章中将会对红黑树进行详细的说明. 红…
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4289768.html 由于平衡二叉树与红黑树都是二叉排序树,又红黑树是对平衡二叉树的一种改进实现,所以它的很多思想算法都来源于排序二叉或平衡二叉树,比如排序二叉树中的添加.删除.查找及查找直接后…
红黑树 红黑树顾名思义就是节点是红色或者黑色的平衡二叉树,它通过颜色的约束来维持着二叉树的平衡.对于一棵有效的红黑树二叉树而言我们必须增加如下规则: 1.每个节点都只能是红色或者黑色 2.根节点是黑色 3.每个叶节点(NIL节点,空节点)是黑色的. 4.如果一个结点是红的,则它两个子节点都是黑的.也就是说在一条路径上不能出现相邻的两个红色结点. 5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点. 这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长…
  文章图片来自邓俊辉老师课件 先提几个问题去思考学习本文 : 红黑树和2-4树(B-Tree)很像,那么它存在的动机又是什么呢 插入和删除操作的逻辑又是怎么样的,时间和空间复杂度可以达到怎么样 和 AVL 对象有什么区别呢 概述 定义 我们可以看到红黑树有4条重要的定义,这4条定义保证了这个平衡树.下面我们看一下它和B-Tree的联系. 从这个结构上说,我们可以知道B-Tree相比于红黑树,红黑树需要维护一个颜色这样的属性,需要空间,而同时红黑树搜索时可以 像二叉树一般查找,而B-Tree每一…
01 上次课程回顾 希尔排序 又叫减少增量排序 increasement = increasement / 3 + 1 02 快速排序思想 思想: 分治法 + 挖坑填数 分治法: 大问题分解成各个小问题,对小问题求解,使得大问题得以解决 03 快速排序代码实现 let arr = [23,123,34,5,123,5,5,3,2,3,1,46,234,123,123] function quicksort(arr,start,end) { let i = start let j = end  …
本文从三个部分去探究HashMap的链表转红黑树的具体时机: 一.从HashMap中有关“链表转红黑树”阈值的声明: 二.[重点]解析HashMap.put(K key, V value)的源码: 三.测试: 一.从HashMap中有关“链表转红黑树”阈值的声明,简单了解HashMap的链表转红黑树的时机 在 jdk1.8 HashMap底层数据结构:散列表+链表+红黑树(图解+源码)的 “四.问题探究”中,我有稍微提到过散列表后面跟什么数据结构是怎么确定的: HashMap中有关“链表转红黑树…