红黑树是上一章二叉搜索树的改进,实现一种平衡 ,保证不会出现二叉树变链表的情况,基本动态集合操作的时间复杂度为O(lgn) 实际用途:c++stl中的set,map是用他实现的 红黑树的性质: 1.每个结点或是红色的,或是黑色的 2.跟结点是黑色的 3.每个叶结点(NIL)是黑色 4.如果一个结点是...
分类:
编程语言 时间:
2016-02-23 11:07:40
阅读次数:
326
本文辑录了《算法之美——隐匿在数据结构背后的语言》(电子工业出版社2016年出版)一书第8章后半部分至第9章之代码(P273~P320)。主要收录最小生成树的Prim算法、克鲁斯卡尔算法,以及二叉搜索树的实现。AVL树、红黑树、Trie树,正在袭来。全文目录、“45个算法”目录、“22个经典问题目录”,以及附录中的经典笔试、面试问题参考答案请见文内链接。...
分类:
编程语言 时间:
2016-02-22 16:03:58
阅读次数:
247
set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。 平衡二叉检索树使用中序遍历算法,检索效率高于vector
分类:
其他好文 时间:
2016-02-05 19:24:12
阅读次数:
210
一,set和hash_set简介 在STL中,set是以红黑树(RB-Tree)作为底层数据结构的,hash_set是以哈希表(Hash table)作为底层数据结构的。set可以在时间复杂度为O(logN)的情况下插入,删除和查找数据。hash_set操作的时间度则比较复杂,取决于哈希函数和哈希表
分类:
其他好文 时间:
2016-02-02 14:39:02
阅读次数:
186
B 树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点
分类:
编程语言 时间:
2016-01-27 23:03:11
阅读次数:
334
map和set两种容器的底层结构都是红黑树,所以容器中不会出现相同的元素,因此count()的结果只能为0和1,可以以此来判断键值元素是否存在(当然也可以使用find()方法判断键值是否存在)。拿map举例,find()方法返回值是一个迭代器,成功返回迭代器指向要查找的元素,失败返回的迭代器指向en...
分类:
其他好文 时间:
2016-01-21 00:25:54
阅读次数:
244
若被删除的结点有两个非叶子结点,那么可以转换为删除一个“替代点”的问题,该替代点最多只有一个非叶子孩子结点。可以通过前驱或者后继(都最多有一个非叶子孩子结点)来替代最初要被删除的结点,所以下面只关注只有一个非叶子孩子结点的问题,一旦我们解决了这个问题,那么解决方法将同样适用于两种情形:1、原本想删除...
分类:
其他好文 时间:
2016-01-19 00:18:22
阅读次数:
238