一、概述
TreeMap是基于红黑树实现的。由于TreeMap实现了java.util.sortMap接口,集合中的映射关系是具有一定顺序的,该映射根据其键的自然顺序进行排序或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法。另外TreeMap中不允许键对象是null。
1、什么是红黑树?
红黑树是一种特殊的二叉排序树,主要有以下几条基本性...
分类:
编程语言 时间:
2015-07-15 15:05:41
阅读次数:
153
C++ Primer(第五版)学习笔记_7_标准模板库_multiset多重集合容器
多重集合容器multiset与set一样,也是使用红黑树来组织元素数据的,唯一不用的是,multiset允许重复的元素键值插入。其结构示意图如下:
1、multiset元素插入
#include
#include
#include
#include
#include
using nam...
分类:
编程语言 时间:
2015-07-14 15:44:47
阅读次数:
171
C++ Primer(第五版)学习笔记_6_标准模板库_set集合容器
Set集合容器实现了红黑树(Red-BlackTree)的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排序,把该元素放到适当的位置。
(1)确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值;
(2)另外,还得确保根节点左子树的高度与右子树的高度相等。这样,二叉树的高度最小,...
分类:
编程语言 时间:
2015-07-13 14:12:47
阅读次数:
140
【红黑树的性质】红黑树是一种特殊的二叉查找树,红黑树的所有空指针用外部节点nullNode(nullNode->rchild=nullNode->rchild=nullNode)代替。红黑树具有以下性质:
根节点是黑色的
所有节点不是黑色就是红色
外部节点都是黑色的
红色节点的孩子节点一定是黑色的
所有从根节点到外部节点的所有路径上,包含相同数目的黑色节点。...
分类:
其他好文 时间:
2015-07-12 09:47:56
阅读次数:
116
在本系列的前面两篇文章中,已经介绍了红黑树以及其插入操作。具体可参考下面两个链接:
红黑树(1) - 介绍
红黑树(2) - 插入操作
1.删除操作介绍
类似于插入操作,红黑树进行删除节点时,也使用重新着色以及旋转这两种方式,来维护它的属性。在插入操作中,我们主要是依靠检测叔节点的颜色来决定哪种场景。在删除操作中,我们使用检测兄弟的颜色,来决定是哪种场景。
在插入操作中,最常见的违反...
分类:
其他好文 时间:
2015-07-12 00:22:30
阅读次数:
140
multimap与map一样,都是使用红黑树对记录型的元素数据按元素键值的比较关系,进行快速的插入、删除和检索操作,所不同的是multimap允许插入具有重复性键值的元素。
在multimap容器中,元素的键值与元素的映照数据的映照关系是多对多的,即multimap是多重映照容器。
由于元素键值允许重复,使得数组操作符“[]”利用键值来访问元素没有意义,故而multimap并没有定义数组方式的“[]...
分类:
其他好文 时间:
2015-07-11 10:39:01
阅读次数:
135
在二叉树中已经探讨过,如果按照随机顺序插入树节点,绝大多数都会出现不平衡的情况。最坏的情况,插入的数据时有序的,二叉树将会变成链表,插入、删除的效率将会严重地降低
下图就是按照数据升序的顺序插入二叉树的情况:
红黑树就是一种解决非平衡树的方法,它是增加了某些特点的二叉搜索树
为了能较快的时间来搜索一颗树,需要保证树总是平衡的(或者至少大部分是平衡的),就是说对树中的每个节点,它左...
分类:
其他好文 时间:
2015-07-10 11:32:41
阅读次数:
197
为了实现快速查找,map内部本身就是按序存储的(比如红黑树)。在我们插入键值对时,就会按照key的大小顺序进行存储。Map的定义:1 template , //入参为key2 //键 值 用于key比较的函数对象,与相对的grea...
分类:
编程语言 时间:
2015-07-09 12:55:51
阅读次数:
180
1.插入介绍
首先以二叉排序树的方法增加节点并标记它为红色。(为何不是红色?因为如果设为黑色,就会导致根到叶子的所有路径中,有一条路径上会多出一个额外的黑节点,这个是很难调整的)。但是,设为红色节点后,可能会导致出现两个连续红色节点的冲突,则可以通过重新着色和旋转来调整。具体的调整操作取决于其他临近节点的颜色。
下面分析一下插入新节点后可能对红黑树性质产生的影响:
性质1-节点是红色或黑...
分类:
其他好文 时间:
2015-07-09 06:19:47
阅读次数:
125
B-树
B-tree树即B树,B即Balanced,平衡的意思,B-树又称为多路平衡查找树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树。
一、定义
B-树是一种多路搜索树(并不一定是二叉的)
1970年,R.Bayer和...
分类:
其他好文 时间:
2015-07-08 22:45:10
阅读次数:
216