红黑树 红黑树顾名思义就是节点是红色或者黑色的平衡二叉树,它通过颜色的约束来维持着二叉树的平衡。对于一棵有效的红黑树二叉树而言我们必须增加如下规则:1、每个节点都只能是红色或者黑色2、根节点是黑色3、每个叶节点(NIL节点,空节点)是黑色的。4、如果一个结点是红的,则它两个子节点都是黑的。也就是说在...
分类:
其他好文 时间:
2014-10-11 01:21:44
阅读次数:
379
[原文链接]1. 红黑树的特性Red-Black Tree ( RBT)也是一种自平衡二叉树,其统计性能要好于 AVL树 。它是在1972年由 鲁道夫·贝尔 发明的,它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的。它是复杂的,但它...
分类:
其他好文 时间:
2014-10-10 20:45:44
阅读次数:
392
最小的k个数 红黑树 代码(C++)本文地址:http://blog.csdn.net/caroline_wendy题目: 输入n个整数, 找出当中的最小k个数.使用红黑树(multiset), 每次替换最大的值, 依次迭代.时间复杂度: O(nlogk).代码:/* * main.cpp * * ...
分类:
编程语言 时间:
2014-10-09 23:56:17
阅读次数:
280
操作
因为每一个红黑树也是一个特化的二叉查找树,因此红黑树上的只读操作与普通二叉查找树上的只读操作相同。然而,在红黑树上进行插入操作和删除操作会导致不再符合红黑树的性质。恢复红黑树的属性需要少量(O(log n))的颜色变更(实际是非常快速的)和不超过三次树旋转(对于插入操作是两次)。虽然插入和删除很复杂,但操作时间仍可以保持为 O(log n) 次。
插入
我们首先以二叉查找树的方...
分类:
其他好文 时间:
2014-10-09 02:46:03
阅读次数:
191
1红黑树简介
先来看下算法导论对R-B Tree的介绍:
红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。
通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平的。
红黑树,作为一棵二叉查找树,满足二叉查找树的一般性质。下面,来了解下 二叉查找树的一般性质。
二叉查找树
二叉查找树...
分类:
其他好文 时间:
2014-10-05 19:24:38
阅读次数:
216
1.为什么要提出红黑树? 二叉查找树的查找、插入、删除时间复杂度都是O(h),其中h是树的高度。假设二叉查找树的结点个数是n,如果二叉查找树比较平衡,则h=O(log n),如果二叉查找树严重不平衡,那么树的高度h远大于O(log n),则二叉查找树的查找、插入、删除操作的时间复杂度就比较高。 平衡...
分类:
其他好文 时间:
2014-10-04 20:15:07
阅读次数:
159
介绍还有一种平衡二叉树:红黑树(Red Black Tree),红黑树由Rudolf Bayer于1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees),1978年被Leonidas J. Guibas和Robert Sedgewick改成一个比較摩登的名字:红黑...
分类:
其他好文 时间:
2014-09-29 22:19:41
阅读次数:
484
Lisp只用原子和表就构建了整个世界,其实表和数组是等价的(不完全)。JS的关联数组是红黑树,关联数组并不是C数组的超集,因为C数组可以当成一片连续内存使用。也许有用的不是数组,而是运算符[],C++只用重载[]就实现了数组。[]只是一个函数调用而已,一种函数调用的简写形式。这种简写或者说语法糖非常重要,因为它让代码的可读性更好。[]是一个运算符重载,即a[1]会变换为标准的函数调用operato...
分类:
其他好文 时间:
2014-09-29 14:19:40
阅读次数:
175
STL 关联容器的底层数据结构是红黑树,故其增删查的时间复杂度都是 O(logn)
map 默认按照 key 的升序进行插入,非基本数据类型要求重载 < 运算符
map 重载了 [] 运算符,使的插入和查找非常方便
map 用 [] 运算符访问元素时,如果不存在这个key,key会自动插入,value为初始化值
map 的 key 对象使用之后就不要再修改,如果必须修改,需要删除后重新插入
multimap 的 key-value 是一对多,没有重载 [] 运算符...
分类:
其他好文 时间:
2014-09-29 00:04:56
阅读次数:
257