通过具体分析每一步的操作来理解插入过程,将每一步操作之后的树结构打印出来可以帮助我们理解,在图中"#"表示黑色,"~"表示红色,空结点(NULL)都为黑色,但是没有被打印出来,看图像的时候注意一下就可以了。下面将整个过程贴出来,所有的步骤都是通过程序实现的。Inserting 61 --------...
分类:
其他好文 时间:
2016-01-17 13:28:35
阅读次数:
185
SGI STL map 实现概述 根据上一节的红黑树分析, 结合 sgi stl map 的实现, 看看红黑树的源码是如何实现的. 以下主要以代码的注释为主. sgi stl map 底层实现是 _Rb_tree类, 为了方便管理, _Rb_tree 内置了 _M_header, 用于记录红黑树中的...
分类:
其他好文 时间:
2016-01-16 19:01:49
阅读次数:
351
红黑树并没有想象的那么难, 初学者觉得晦涩难读可能是因为情况太多. 红黑树的情况可以通过归结, 通过合并来得到更少的情况, 如此可以加深对红黑树的理解. 网络上的大部分红黑树的讲解因为没有「合并」. 红黑树的五个性质: 性质1. 节点是红色或黑色。 性质2. 根是黑色。 性质3. 所有叶子都是黑色....
分类:
其他好文 时间:
2016-01-16 16:58:21
阅读次数:
308
红黑树C#算法。在线javascript演示地址:http://sandbox.runjs.cn/show/2nngvn8wusing System;using System.Collections.Generic;using System.Linq;using System.Text;using ...
在线演示地址:http://sandbox.runjs.cn/show/2nngvn8w有点遗憾,本想实现个很棒的功能,就是红黑树每次“变形”的时候,做个“快照”,“变形”了几次就“快照”几次。方便理解红黑树的运作原理。在把“快照”保存到数组的时候,发现全是深拷贝,也就是所有“快照”都是最后那一步。...
分类:
编程语言 时间:
2016-01-13 17:34:54
阅读次数:
1707
红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的,他称之为"对称二叉B树",它现代的名字是在Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文中获得...
分类:
其他好文 时间:
2016-01-09 18:15:11
阅读次数:
241
解题技巧: 1.输入的树可能不是根据从根节点到子节点的顺序输入的。 例如: 输入可能是: 3 1 0 1 100 2 1 -1 200 2 3 1 400 所以一个较笨的方法是:先存成矩阵的形式,再转换成邻接链表的形式。 2.接着是一个...
分类:
其他好文 时间:
2016-01-09 12:24:55
阅读次数:
253
红黑树是一种自平衡二叉搜索树,每个结点都有一个额外的位(bit),代表了结点的颜色(红色或黑色)。这些代表颜色的位用来确保红黑树在插入和删除时保持基本平衡。红黑树不保证完全平衡,但是已经足够使得搜索能在O(log n)时间内完成,n为树中元素的个数。插入和删除操作,伴随树结构的重新构造和重新着色,也...
分类:
其他好文 时间:
2016-01-06 23:34:18
阅读次数:
193
前面我们已经接触过几种数据结构了,有数组、链表、Hash表、红黑树(二叉查询树),今天再来看另外一种数据结构:栈。 什么是栈呢,我就不找它具体的定义了,直接举个例子,栈就相当于一个很窄的木桶,我们往木桶里放东西,往外拿东西时会发现,我们最开始放的东西在最底部,最先拿出来的是刚刚放进去的。所以,...
分类:
其他好文 时间:
2016-01-06 00:24:28
阅读次数:
231
前面我们学习二叉搜索树的时候发如今一些情况下其高度不是非常均匀,甚至有时候会退化成一条长链,所以我们引用一些”平衡”的二叉搜索树。红黑树就是一种”平衡”的二叉搜索树,它通过在每一个结点附加颜色位和路径上的一些约束条件能够保证在最坏的情况下基本动态集合操作的时间复杂度为O(nlgn)....
分类:
编程语言 时间:
2016-01-03 22:11:15
阅读次数:
333