从标准二叉树的极端情况我们推导出2-3树这样的数据结构具备自平衡的特性,但是要实现这个特性在算法上相当复杂。考虑在大部分情况下,对于检索的指数级时间消费O(lgN)要求并不严格。因此,我们会看到如何将一颗标准的2-3树转变成红黑树的过程。 一、局部变换 将一个4-节点分解为一颗2-3树可能有6种情况 ...
分类:
其他好文 时间:
2018-09-09 16:05:29
阅读次数:
180
关联容器,也就是 ,一个非常神器的数据结构。 是啥鬼? 是利用红黑树实现的。 当你在写程序的时候,可能需要存储一些信息,例如存储学生姓名对应的分数,例如: ,`Bob 100 Alan 100`。 但是由于数组下标只能为非负整数,所以无法用姓名来存储,这个时候最简单的办法就是使用 STL 的 了! ...
分类:
其他好文 时间:
2018-09-09 12:03:55
阅读次数:
150
二叉树是最常用的数据结构之一,笔者过去一直将关注点放在复杂的树结构(例如红黑树,自平衡树),认为那些才是树的重要应用,但当重新由基本看起,才发现树的基本定中就隐藏着树这一结构的精髓。尽管是些浅薄蠢笨的理解和推演,但笔者还是满怀兴奋的想要将它记录下来。 一、二叉树的定义 二叉树的定义不用多说,很多书本 ...
分类:
其他好文 时间:
2018-09-09 00:44:55
阅读次数:
216
【前言:本文所讨论的红黑树之目的在于使读者能更简单清晰地了解红黑树的构造,使读者能在纸上清晰快速地画出红黑树,而不是为了写出红黑树的实现代码。 若是要在代码级理解红黑树,则势必需要记住其复杂的插入和旋转的各种情况,我认为那只有助于增加大家对红黑树的恐惧,实际面试和工作中几乎不会遇到需要自己动手实现红 ...
分类:
其他好文 时间:
2018-09-07 18:37:44
阅读次数:
202
红黑树: 红黑树(Red Black Tree) 是一种自平衡二叉查找树 : l 每个节点或者是黑色,或者是红色。 l 根节点是黑色。 l 每个叶子节点是黑色。 l 如果一个节点是红色的,则它的子节点必须是黑色的。 l 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。 红黑树的各种操作 ...
分类:
其他好文 时间:
2018-09-06 03:01:05
阅读次数:
114
首先说一下,关于红黑树有一篇很棒的论文《A dichromatic framework for balanced trees》,作者之一的Robert Sedgewick,想必大家不会陌生。如果有兴趣可以仔细研读一下,里面讲了更多细节的分析,而本文也借鉴了其中的一些思路和配图。 回顾一下之前的结构分 ...
分类:
其他好文 时间:
2018-09-02 21:48:56
阅读次数:
211
题意:将一个含K(K为偶数)个数字的整数Z割分为A和B两部分,若Z能被A*B整除,则输出Yes,否则输出No。 分析:当A*B为0的时候,不能被Z整除,输出No。否则会出现浮点错误。 1133 Splitting A Linked List(25 分) 题意:给定一个链表,将链表重新排序,在不打乱原 ...
分类:
其他好文 时间:
2018-09-02 17:14:33
阅读次数:
177
前言:本文解决的问题 什么是红黑树 什么时候使用红黑树 红黑树插入元素时如何保持平衡 1 什么是红黑树 红黑树(Black red Tree) 是一棵自平衡树,每个节点都遵循以下四条: 所有节点只能是红色或者黑丝 根节点是黑色 只存在相邻的红色节点(即红色节点不能有红色的父节点或者红色的孩子) 任意 ...
分类:
其他好文 时间:
2018-09-01 21:54:17
阅读次数:
170
代码版本 JDK每一版本都在改进。本文讨论的HashMap和HashTable基于JDK 1.7.0_67。源码见这里 1. 时间 HashTable产生于JDK 1.1,而HashMap产生于JDK 1.2。从时间的维度上来看,HashMap要比HashTable出现得晚一些。 2. 作者 以下是 ...
分类:
其他好文 时间:
2018-09-01 17:32:06
阅读次数:
180
红黑树是AVL树的另一变种,他也能在动态变化的过程中保持某种意义的平衡,对红黑树的操作最坏情况下也只有O(logN)的复杂度,而且下面我们会看到,对于插入而言我们有另外一种比AVL树更容易的实现方法,非递归的。在具体谈到技术细节之前,我们或许会有疑问:已经有AVL这种渐进复杂度很低的结构了,也能保持 ...
分类:
其他好文 时间:
2018-09-01 00:44:34
阅读次数:
405